zoukankan      html  css  js  c++  java
  • sqoop笔记

    sqoop 应该算是一个ETL工具,方便的数据导入导出功能。

    # Sqoop 用来导出hive数据到mysql的工具
    
    # 下载 sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
    cd /usr/local/src
    # rz 上传到hadoop主机上
    tar zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
    
    mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop-1.4.7
    
    cd /usr/local/src/sqoop-1.4.7/conf
    
    cp sqoop-env-template.sh sqoop-env.sh
    
    vim sqoop-env.sh
    # 小技巧:光标在需要的地方,输入命令 :r!which hadoop  可以得到hadoop的路径,删除后面多余的即可。
    export HADOOP_COMMON_HOME=/usr/local/src/hadoop-2.7.5
    export HADOOP_MAPRED_HOME=/usr/local/src/hadoop-2.7.5
    export HIVE_HOME=/usr/local/src/hive2.3.2
    # 保存退出
    
    ### 加入jdbc驱动 for mysql 可以从hive中复制一个过来。
    cd /usr/local/src/hive2.3.2/lib
    cp mysql-connector-java-5.1.46.jar ../../sqoop-1.4.7/lib/
    
    
    #----------------如果忘记了mysql密码,无法登录。可以先停止服务,
    #----------------然后以命令启动 mysqld_safe --skip-grant-tables & 
    #----------------则可以跳过密码。
    
    
    ## 查看支持的命令:cd /usr/local/src/sqoop-1.4.7/bin     ll 
    total 88
    -rwxr-xr-x 1 1000 1000 6770 Dec 19 07:00 configure-sqoop
    -rwxr-xr-x 1 1000 1000 6533 Dec 19 07:00 configure-sqoop.cmd
    -rwxr-xr-x 1 1000 1000 3133 Dec 19 07:00 sqoop
    -rwxr-xr-x 1 1000 1000 1055 Dec 19 07:00 sqoop.cmd
    -rwxr-xr-x 1 1000 1000 3060 Dec 19 07:00 sqoop-codegen
    -rwxr-xr-x 1 1000 1000 3070 Dec 19 07:00 sqoop-create-hive-table
    -rwxr-xr-x 1 1000 1000 3057 Dec 19 07:00 sqoop-eval
    -rwxr-xr-x 1 1000 1000 3059 Dec 19 07:00 sqoop-export
    -rwxr-xr-x 1 1000 1000 3057 Dec 19 07:00 sqoop-help
    -rwxr-xr-x 1 1000 1000 3059 Dec 19 07:00 sqoop-import
    -rwxr-xr-x 1 1000 1000 3070 Dec 19 07:00 sqoop-import-all-tables
    -rwxr-xr-x 1 1000 1000 3069 Dec 19 07:00 sqoop-import-mainframe
    -rwxr-xr-x 1 1000 1000 3056 Dec 19 07:00 sqoop-job
    -rwxr-xr-x 1 1000 1000 3067 Dec 19 07:00 sqoop-list-databases
    -rwxr-xr-x 1 1000 1000 3064 Dec 19 07:00 sqoop-list-tables
    -rwxr-xr-x 1 1000 1000 3058 Dec 19 07:00 sqoop-merge
    -rwxr-xr-x 1 1000 1000 3062 Dec 19 07:00 sqoop-metastore
    -rwxr-xr-x 1 1000 1000 3060 Dec 19 07:00 sqoop-version
    -rwxr-xr-x 1 1000 1000 3987 Dec 19 07:00 start-metastore.sh
    -rwxr-xr-x 1 1000 1000 1564 Dec 19 07:00 stop-metastore.sh
    
    ## 查看一下用法 
    ./sqoop-list-databases --help
    
    # 查看目标mysql库
    ./sqoop-list-databases --connect jdbc:mysql://slave3 --username root --password 123456
    
    # 查看目标mysql中某个表
    ./sqoop-list-tables --connect jdbc:mysql://localhost/hive --username root --password 123456
    
    #------------------------以上命令执行成功,表示sqoop安装成功-------------------------
    
    
    #------------------------------mysql to HDFS 示例------------------------------------
    ./sqoop import 
    --connect jdbc:mysql://slave3/test 
    --username root 
    --password 123456 
    --target-dir /sqooptest 
    --fields-terminated-by ',' 
    --table jos_jf_content 
    --split-by id 
    --m 2
    
    ' # 以下是注释: 
    # !!!! 一定要注意每行末尾的斜线后面不能再有空格或字符
    --connect jdbc:mysql://slave3/test  # 源库
    --target-dir /sqooptest  # 目标文件夹 
    --fields-terminated-by ',' # 字段分隔符
    --table jos_jf_content # 源表
    --split-by id  # 分片字段
    --m 2   # 分几片, 即maptask个数
    '
    ## 等待MR执行完成. sqoop的导入数据是没有reduce阶段的。
    # 如果出现了找不到jar包的错误,则检查hadoop中的 mapred-site.xml
    # 是否缺少以下配置:
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    
    #------------------------------mysql to Hive 示例------------------------------------
    ./sqoop import 
    --connect jdbc:mysql://slave3/test 
    --username root 
    --password 123456 
    --fields-terminated-by ',' 
    --table banner 
    --hive-import 
    --m 1
    # 同上面的HDFS语句差不多,加上 --hive-import 去掉 --target-dir
    # 完成后进入hive的default库查看。
    
    # 1. 如果出现错误:FileAlreadyExistsException: Output directory hdfs://xxxx/user/root/jos_banner already exists
    # 则执行hdfs dfs -rm -r /user/root/jos_banner 删除即可。
    
    # 2. 如果出现错误:Could not load org.apache.hadoop.hive.conf.HiveConf.Make sure HIVE_CONF_DIR
    # 则在当前用户执行: vim ~/.bash_profile 加入 export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/usr/local/src/hive2.3.2/lib/*
    # 再 source ~/.bash_profile  目的也就是加入了hive所在目录所有的库文件路径
    
    # 3. 错误ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
    # 则执行:vim $JAVA_HOME/jre/lib/security/java.policy 增加一行 permission javax.management.MBeanTrustPermission "register"; 
    
    # 4. 错误ERROR exec.DDLTask: java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.ObjectMapper.readerFor(Ljava/lang/Class;)...
    # 则可能是jackson版本的不兼容。将$SQOOP_HOME/lib/jackson*.jar 文件bak,再把$HIVE_HOME/lib/jackson*.jar 拷贝至 $SQOOP_HOME/lib 目录中
    
    
    #------------------------------导入时按条件------------------------------------
    sqoop import 
    --connect jdbc:mysql://slave3/test 
    --username root 
    --password 123456 
    --where "clicks='1'" 
    --fields-terminated-by ',' 
    --table banner 
    --hive-import 
    --m 1
    
    #------------------------------按需导入 ------------------------------------
    sqoop import 
    --connect jdbc:mysql://slave3/test 
    --username root 
    --password 123456 
    --query 'SELECT id,type,name,clickurl,date FROM `banner` where id >5 and $CONDITIONS' 
    --fields-terminated-by '	' 
    --target-dir /banner 
    --hive-table banner 
    --hive-import 
    --m 1
    
    #------------------------------增量 导入 ------------------------------------
    sqoop import 
    --connect jdbc:mysql://slave3/test 
    --username root 
    --password 123456 
    --fields-terminated-by '	' 
    --table banner 
    --hive-import 
    --m 1
    --incremental append 
    --check-column id 
    --last-value 8
    
    
    
    ############################################### 导出到mysql##############
    #--------------hdfs to mysql 需要提前在mysql中创建要接收数据的表。---------
    #--------------characterEncoding=utf-8 是为了支持中文--------------------
    sqoop export 
    --connect "jdbc:mysql://slave3/test?useUnicode=true&characterEncoding=utf-8" 
    --username root 
    --password 123456 
    --input-fields-terminated-by ',' 
    --table users 
    --export-dir /data/stu_ext 
    --m 1
    
    #--------------Hive to mysql 需要提前在mysql中创建要接收数据的表。---------
    sqoop export 
    --connect "jdbc:mysql://slave3/test?useUnicode=true&characterEncoding=utf-8" 
    --username root 
    --password 123456 
    --input-fields-terminated-by ',' 
    --table student 
    --export-dir /user/hive/warehouse/test.db/student/ 
    --m 1
  • 相关阅读:
    第04组 Alpha冲刺 总结
    第04组 Alpha冲刺 (6/6)
    软工实践个人总结
    第09组 每周小结 (3/3)
    第09组 每周小结 (2/3)
    第09组 每周小结 (1/3)
    第09组 Beta冲刺 总结
    第09组 Beta冲刺 (5/5)
    第09组 Beta冲刺 (4/5)
    第09组 Beta冲刺 (3/5)
  • 原文地址:https://www.cnblogs.com/frx9527/p/sqoop.html
Copyright © 2011-2022 走看看