大数据课程第十天
Sqoop Hadoop的辅助工具 (CDH)
-
Hadoop(CDH)
1. ip 主机名 映射 防火墙 selinux jdk ssh 2. hadoop解压缩 3. 修改hadoop相关配置文件 hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml slaves 4. 解压缩cdh5.3.6-snappy-lib-natirve.tar.gz 替换 hadoop中的native文件的内容 解决的是64操作系统兼容的问题 5. 格式化 bin/hdfs namenode -format 6. 启动进程 4个进程
-
Hive(CDH)
1. 解压缩hive 2. 修改hive_home/conf/hive-env.sh hadoop_home hive_conf_dir hive-site.xml 修改metastore 预先安装mysql 3. 上传mysql驱动jar chkconfig mysqld on 设置自启动 4. hdfs 创建2个目录 /tmp /user/hive/warehouse 5. 启动hive
-
Sqoop(CDH)
1. 解压缩 sqoop 2. 配置 sqoop_home/conf sqoop-env.sh export HADOOP_COMMON_HOME=/opt/install/hadoop-2.5.0-cdh5.3.6 export HADOOP_MAPRED_HOME=/opt/install/hadoop-2.5.0-cdh5.3.6 export HIVE_HOME=/opt/install/hive-0.13.1-cdh5.3.6 3. 导入驱动jar 4. 测试 bin/sqoop list-databases -connect jdbc:mysql://hadoop22:3306 -username root -password 123456
-
Sqoop语法详解
-
语法格式
1. bin/sqoop list-databases -connect jdbc:mysql://hadoop22:3306 -username root -password 123456 2. 推荐 bin/sqoop list-databases \ --connect \ jdbc:mysql://hadoop22:3306 \ --username root \ --password 123456
-
Import导入 (MySQL ----> HDFS/Hive)
-
准备
mysql的数据 create database sqoop create table mysql_user( id int primary key, name varchar(12) ); insert into mysql_user values (1,'suns1'); insert into mysql_user values (2,'suns2'); insert into mysql_user values (3,'suns3'); insert into mysql_user values (4,'suns4'); insert into mysql_user values (5,'suns5');
-
基本导入HDFS
bin/sqoop import \ --connect \ jdbc:mysql://hadoop22:3306/sqoop \ --username root \ --password 123456 \ --table mysql_user #hdfs的位置?默认导入hdfs的位置:/user/root/mysql_user /user/${username}/${table_name} #sqoop导数据时,所运行的mapreduce 没有reduce只有map #为什么sqoop导数据时,split是5 对应5个map? Text --- TextInputFormat ---- block --- split --- map DB --- DBInputFormat --- 一行 --- 一个split -- 一个map #输出的文件内容中,列的分隔符默认是,
# 自定义mysql 导入 hdfs目录 /sqoop bin/sqoop import \ --connect \ jdbc:mysql://hadoop22:3306/sqoop \ --username root \ --password 123456 \ --table mysql_user \ --target-dir /sqoop
# 在目标目录存在的情况下,sqoop自动删除 bin/sqoop import \ --connect \ jdbc:mysql://hadoop22:3306/sqoop \ --username root \ --password 123456 \ --table mysql_user \ --target-dir /sqoop \ --delete-target-dir
# 指定map的个数 bin/sqoop import \ --connect \ jdbc:mysql://hadoop22:3306/sqoop \ --username root \ --password 123456 \ --table mysql_user \ --target-dir /sqoop \ --num-mappers 1 \ --delete-target-dir
# 指定列分割符 bin/sqoop import \ --connect \ jdbc:mysql://hadoop22:3306/sqoop \ --username root \ --password 123456 \ --table mysql_user \ --target-dir /sqoop \ --num-mappers 1 \ --delete-target-dir \ --fields-terminated-by '\t'
# 增量导入数据 --check-column <column> Source column to check for incremental id --last-value <value> Last imported value in the incremental 5 --incremental <import-type> Define an incremental import of type append 'append' or 'lastmodified' # 一定不要加入 --delete-target-dir bin/sqoop import \ --connect \ jdbc:mysql://hadoop22:3306/sqoop \ --username root \ --password 123456 \ --table mysql_user \ --target-dir /sqoop \ --num-mappers 1 \ --fields-terminated-by '\t' \ --check-column id \ --last-value 5 \ --incremental append
# 快速导入模式 bin/sqoop import \ --connect \ jdbc:mysql://hadoop22:3306/sqoop \ --username root \ --password 123456 \ --table mysql_user \ --target-dir /sqoop \ --num-mappers 1 \ --delete-target-dir \ --direct --fields-terminated-by '\t' 原理: 非快速模式 数据的导入 jdbc 快速 使用的是mysql提供 export import工具 注意: sqoop如果和mysql 安装在不同的机器中 ,使用快速导入 默认报错。
# import hive表 #--hive-import \ #--hive-database Hive_1 \ #--hive-table t_user \ bin/sqoop import \ --connect \ jdbc:mysql://hadoop22:3306/sqoop \ --username root \ --password 123456 \ --table mysql_user \ --delete-target-dir \ --hive-import \ --hive-database Hive_1 \ --hive-table t_user \ --num-mappers 1 \ --fields-terminated-by '\t'
-
Export (HDFS/Hive —> MySQL)
create table to_mysql( id int, name varchar(50) );
1. hdfs------>mysql bin/sqoop export \ --connect \ jdbc:mysql://hadoop22:3306/sqoop \ --username root \ --password 123456 \ --table to_mysql \ --export-dir /sqoop \ --num-mappers 1 \ --input-fields-terminated-by ',' 2. hive ------->mysql bin/sqoop export \ --connect \ jdbc:mysql://hadoop22:3306/sqoop \ --username root \ --password 123456 \ --table to_mysql \ --export-dir /user/hive/warehouse/Hive_1.db/t_user \ --num-mappers 1 \ --input-fields-terminated-by ','
-
脚本化的sqoop
# 脚本化的目的:复用sqoop导入 导出命令 1. file文件 1.1 创建一个Sqoop文件 普通文件 sqoop.file export --connect jdbc:mysql://hadoop22:3306/sqoop --username root --password 123456 --table to_mysql --export-dir /sqoop --num-mappers 1 --input-fields-terminated-by ',' 1.2 bin/sqoop --options-file /root/sqoop.file 2. job作业 1.1 创建job作业 bin/sqoop job \ --create test_job1 \ -- \ export \ --connect \ jdbc:mysql://hadoop22:3306/sqoop \ --username root \ --password 123456 \ --table to_mysql \ --export-dir /sqoop \ --num-mappers 1 \ --input-fields-terminated-by ',' 1.2 bin/sqoop job --exec test_job1 1.3 问题 每一次输入密码 不利于自动化处理 所以定密码的存储文件 echo -n "123456" >> /root/password bin/sqoop job \ --create test_job2 \ -- \ export \ --connect \ jdbc:mysql://hadoop22:3306/sqoop \ --username root \ --password-file file:///root/password \ --table to_mysql \ --export-dir /sqoop \ --num-mappers 1 \ --input-fields-terminated-by ',' # export_mysql.sh /opt/install/sqoop-1.4.5-cdh5.3.6/bin/sqoop job --exec test_job2
-
定时处理
1. 安装crontab 2. crontab -e 编辑配置文件 minute hour day month week command */5 * * * * command */1 * * * * echo 'suns' >> /root/sunshuai */1 * * * * /opt/install/sqoop-1.4.5-cdh5.3.6/bin/sqoop job --exec test_job2 3. 启动关闭服务 /sbin/service crond start /sbin/service crond stop ps -ef | grep cron
基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1~59 每分钟用*或者 */1表示 第2列表示小时1~23(0表示0点) 第3列表示日期1~31 第4列表示月份1~12 第5列标识号星期0~6(0表示星期天) 第6列要运行的命令 crontab文件的一些例子: 30 21 * * * /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每晚的21:30重启apache。 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每月1、10、22日的4 : 45重启apache。 10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每周六、周日的1 : 10重启apache。 0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart 上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。 0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每星期六的11 : 00 pm重启apache。 * */1 * * * /usr/local/etc/rc.d/lighttpd restart 每一小时重启apache * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart 晚上11点到早上7点之间,每隔一小时重启apache 0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart 每月的4号与每周一到周三的11点重启apache 0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart 一月一号的4点重启apache */30 * * * * /usr/sbin/ntpdate 210.72.145.44 每半小时同步一下时间
-
-