hadoop2.6.5+sqoop1.4.6环境部署与测试(三)
2017-08-08 21:33
507 查看
在hadoop环境搭建完成后,接下来就是要把sqoop整合进来,使其可以利用hadoop和mysql-connector-java来从MySQL中抽取数据并转存到hdfs上。
1. 将得到的sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz解压到/usr/local/下,并建立/usr/local/sqoop软链接。
1)进入到$SQOOP_HOME/conf目录下,复制一份sqoop环境配置脚本sqoop-env-template.sh到当前目录,并重命名为sqoop-env.sh:
现在数据已经成功抽取并以文本方式存放到hdfs上了。下面就可以编写mapreduce程序来对文本进行分析了。
1. 将得到的sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz解压到/usr/local/下,并建立/usr/local/sqoop软链接。
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz /usr/local/ tar -xvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz ln -s /usr/local/sqoop-1.4.6.bin__hadoop-2.0.4-alpha /usr/local/sqoop2. 将/usr/local/sqoop,/usr/local/sqoop-1.4.6.bin__hadoop-2.0.4-alpha属主属组修改为hadoop,保证hadoop用户可以使用:
chown -R hadoop:hadoop /usr/local/sqoop-1.4.6.bin__hadoop-2.0.4-alpha chown -R hadoop:hadoop /usr/local/sqoop3. 配置SQOOP_HOME环境变量,在/etc/profile中添加和修改如下记录:
export SQOOP_HOME=/usr/local/sqoop export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SQOOP_HOME/bin:$PATH4. 对sqoop进行配置,保证其可以整合到hadoop中:
1)进入到$SQOOP_HOME/conf目录下,复制一份sqoop环境配置脚本sqoop-env-template.sh到当前目录,并重命名为sqoop-env.sh:
cd $SQOOP_HOME/conf cp sqoop-env-template.sh sqoop-env.sh2)修改sqoop-env.sh的HADOOP_COMMON_HOME和HADOOP_MAPRED_HOME变量值,使其对应于相应的hadoop文件路径:
export HADOOP_COMMON_HOME=/usr/local/hadoop export HADOOP_MAPRED_HOME=/usr/local/hadoop/share/hadoop/mapreduce3)sqoop需要连接mysql和运行mapreduce程序来完成数据抽取,因此需要mysql-connector和mapreduce相应库文件的支持,请将mysql-connector-java包和$HADOOP_HOME/share/hadoop/mapreduce/下的所有jar包复制到$SQOOP_HOME/lib目录下:
cp $HADOOP_HOME/share/hadoop/mapreduce/*.jar $SQOOP_HOME/lib/ cp ~/mysql-connector-java-5.1.32-bin.jar $SQOOP_HOME/lib/ chown -R hadoop:hadoop $SQOOP_HOME/lib/5. 下面可以使用sqoop脚本来进行数据抽取操作了,该脚本在$SQOOP_HOME/bin目录下,使用方法如下:
#测试数据库是否可以连接 sqoop list-databases --connect jdbc:mysql://localhost:3306/actionLog \ --username root --P (如果返回数据库名,则可以通过sqoop连接mysql数据库)
#从MySQL库中抽取数据到hdfs上 sqoop import --connect jdbc:mysql://hadoop-test-nn:3306/actionLog \ --username root -P \ --table log \ --columns "logger_id,time" \ --where 'action = "login"' \ --target-dir /test/loginInfo 选项说明: --username 数据库用户名 -P 使用交互方式隐蔽和输入数据库用户口令 --table 指定导出的库表名 --columns 指定表中哪些列的数据被导出 --where 可以通过添加类似sql语句中where条件来筛选导出的记录 --target-dir 导出的数据存放在hdfs上的路径,这里的路径值是hdfs上的路径,并不是文件系统本身的绝对路径上述sqoop import命令是对mysql上actionLog库中的log表进行数据抽取,该表的表结构如下:
mysql> desc log; +--------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+--------------+------+-----+---------+----------------+ | log_id | bigint(20) | NO | PRI | NULL | auto_increment | | name | varchar(255) | YES | | NULL | | | action | varchar(255) | YES | | NULL | | | logger_id | varchar(255) | YES | | NULL | | | time | varchar(255) | YES | | NULL | | +--------------+--------------+------+-----+---------+----------------+因为指定了导出列为logger_id、time。因此导出到hdfs上的数据如下:
[hadoop@hadoop-test-nn lib]$ hdfs dfs -ls /test/loginInfo Found 1 items -rw-r--r-- 2 hadoop supergroup 211825 2017-08-02 16:04 /test/loginInfo/userLoginInfo.txt [hadoop@hadoop-test-nn lib]$ hdfs dfs -cat /test/loginInfo/userLoginInfo.txt wanger,2017-07-27 14:21:12 zhangsan,2017-07-27 14:37:16 james,2017-07-27 15:27:13 ...(注:这里对/test/loginInfo下的文本内容进行了合并和重新存放,实际使用过程中该目录下会产生多个以part-**格式命名的文本,文本内容的格式是一致的)
现在数据已经成功抽取并以文本方式存放到hdfs上了。下面就可以编写mapreduce程序来对文本进行分析了。
相关文章推荐
- hadoop2.6.5+sqoop1.4.6环境部署与测试(一)
- hadoop2.6.5+sqoop1.4.6环境部署与测试(二)
- Hadoop多节点测试环境快速部署半自动脚本
- Sqoop1.4.5-安装测试部署(基于Hadoop2.2.0环境)
- Hadoop 学习笔记 (八) hadoop2.2.0 测试环境部署 及两种启动方式
- Hadoop2.6.5安装部署及环境变量配置
- centos 7 安装+hadoop2.6.5环境部署(伪分布式)
- Sqoop1.4.5(基于Hadoop2.2环境)的安装测试部署
- hadoop2.6.5+spark2.1.0+hbase1.2.6完全分布式环境部署
- 持续集成之③:将代码自动部署至测试环境
- Hadoop生态系统搭建(2)——数据分析脚本 Pig 的安装部署与测试
- (防坑笔记)hadoop3.0 (一) 环境部署与伪分布式(hdfs)
- Hadoop环境部署
- OpenStack部署之前,如何搭建一个测试环境
- Hadoop 离线安装 CDH5.1 第一章:离线环境部署
- Hadoop 2.X伪分布式环境搭建和测试
- 禅道、BugFree测试环境部署
- win10系统iis下部署搭建https (ssl/tls)本地测试环境
- (最齐全)Jenkins+Maven+SVN搭建自动部署,自动测试环境
- Hadoop 1.x测试环境搭建