• 如何将mysql数据导入Hadoop之Sqoop安装


      Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目。

      总之Sqoop是一个转换工具,用于在关系型数据库与HDFS之间进行数据转换。

      注意:sqoop1与sqoop2完全不兼容,1.4.6及之前的版本是sqoop1,之后的是sqoop2

    Sqoop1和Sqoop2的对比

    sqoop2比sqoop1的改进

    1.  引入sqoop server,集中化管理connector等
    2.  多种访问方式:CLI,Web UI,REST API
    3.  引入基于角色 的安全机制

    sqoop1与sqoop2的优缺点

    1. sqoop1的架构,仅仅使用一个sqoop客户端,sqoop2的架构,引入了sqoop server集中化管理connector,以及rest api,web,UI,并引入权限安全机制。
    2. sqoop1优点架构部署简单
    3. sqoop1的缺点命令行方式容易出错,格式紧耦合,无法支持所有数据类型,安全机制不够完善,例如密码暴漏,
    4. 安装需要root权限,connector必须符合JDBC模型
    5. sqoop2的优点多种交互方式,命令行,web UI,rest API,conncetor集中化管理,所有的链接安装在sqoop server上,完善权限管理机制,connector规范化,仅仅负责数据的读写。
    6. sqoop2的缺点,架构稍复杂,配置部署更繁琐。

     sqoop1架构图

     sqoop2架构图

     

      由于sqoop2还不是很完善,官方建议生产环境不建议使用,在此就sqoop1.4.6来作介绍

    安装环境:

    Cenos7系统
    sqoop版本:1.4.6
    Hadoop:2.7.3
    MySQL:5.7.15
    JDK :1.8

    下载并解压sqoop1.4.6

    安装在一台节点上就可以了
    点击 sqoop 下载地址,下载Sqoop安装文件sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz。将文件上传到服务器的/usr/local文件夹中。
    下面执行以下命令

    cd ~ #进入当前用户的用户目录
    cd /usr/local
    sudo tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /usr/local #解压安装文件
    sudo mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop146 #修改文件名
    sudo chown -R hadoop:hadoop sqoop146 #修改文件夹属主,如果你当前登录用户名不是hadoop,请修改成你自己的用户名 (hadoop为用Hadoop创建的用户组和用户名,sqoop将与Hadoop组合使用)

    修改配置文件sqoop-env.sh

    cd sqoop146/conf/
    cat sqoop-env-template.sh >> sqoop-env.sh #将sqoop-env-template.sh复制一份并命名为sqoop-env.sh
    vi sqoop-env.sh #编辑sqoop-env.sh

    修改sqoop-env.sh的如下信息,若有其它的可以都加上

    export HADOOP_COMMON_HOME=/usr/local/hadoop273
    export HADOOP_MAPRED_HOME=/usr/local/hadoop273
    export HBASE_HOME=/usr/local/hbase
    export HIVE_HOME=/usr/local/hive
    export ZOOCFGDIR= #如果读者配置了ZooKeeper,也需要在此配置ZooKeeper的路径

    配置环境变量

    打开当前用户的环境变量配置文件:

    vi ~/.bash_profile

    在配置文件第一行键入如下信息:

    export SQOOP_HOME=/usr/local/sqoop146
    export PATH=$PATH:$SBT_HOME/bin:$SQOOP_HOME/bin
    export CLASSPATH=$CLASSPATH:$SQOOP_HOME/lib

    保存该文件,退出vim编辑器。
    然后,执行下面命令让配置文件立即生效:

    source ~/.bash_profile

    将mysql驱动包拷贝到$SQOOP_HOME/lib

    下面要把MySQL驱动程序和hadoop-connector jar包拷贝到$SQOOP_HOME/lib目录下,不存在先下载驱动包。

    cp ./mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar /usr/local/sqoop146/lib
    
    cp $HADOOP_HOME/share/hadoop/common/hadoop-common-2.7.3.jar $SQOOP_HOME/lib

    修改$SQOOP_HOME/bin/configure-sqoop

    注释掉HCatalog,Accumulo检查(除非你准备使用HCatalog,Accumulo等HADOOP上的组件)    

    ##Moved to be a runtime check in sqoop.
    #if[ ! -d "${HCAT_HOME}" ]; then
    #  echo "Warning: $HCAT_HOME does notexist! HCatalog jobs will fail."
    #  echo 'Please set $HCAT_HOME to the root ofyour HCatalog installation.'
    #fi
     
    
    #if[ ! -d "${ACCUMULO_HOME}" ]; then
    #  echo "Warning: $ACCUMULO_HOME does notexist! Accumulo imports will fail."
    #  echo 'Please set $ACCUMULO_HOME to the rootof your Accumulo installation.'
    #fi
     
    
    #Add HCatalog to dependency list
    #if[ -e "${HCAT_HOME}/bin/hcat" ]; then
    # TMP_SQOOP_CLASSPATH=${SQOOP_CLASSPATH}:`${HCAT_HOME}/bin/hcat-classpath`
    #  if [ -z "${HIVE_CONF_DIR}" ]; then
    #   TMP_SQOOP_CLASSPATH=${TMP_SQOOP_CLASSPATH}:${HIVE_CONF_DIR}
    #  fi
    #  SQOOP_CLASSPATH=${TMP_SQOOP_CLASSPATH}
    #fi
     
    
    #Add Accumulo to dependency list
    #if[ -e "$ACCUMULO_HOME/bin/accumulo" ]; then
    #  for jn in `$ACCUMULO_HOME/bin/accumuloclasspath | grep file:.*accumulo.*jar |cut -d':' -f2`; do
    #    SQOOP_CLASSPATH=$SQOOP_CLASSPATH:$jn
    #  done
    #  for jn in `$ACCUMULO_HOME/bin/accumuloclasspath | grep file:.*zookeeper.*jar |cut -d':' -f2`; do
    #    SQOOP_CLASSPATH=$SQOOP_CLASSPATH:$jn
    #  done
    #fi

    测试与MySQL的连接

    首先请确保mysql服务已经启动了,如果没有启动,请执行下面命令启动:

     service mysql start

    然后就可以测试sqoop与MySQL之间的连接是否成功:

    sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username root -password root

    root为数据库的用户名和密码,mysql的数据库列表显示在屏幕上表示连接成功。

    作者:欢醉
    公众号【一个码农的日常】 技术群:319931204 1号群: 437802986 2号群: 340250479
    出处:http://zhangs1986.cnblogs.com/
    码云:https://gitee.com/huanzui
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    转载于:https://www.cnblogs.com/zhangs1986/p/7052621.html

  • 相关阅读:
    _ 下划线 Underscores __init__
    Page not found (404) 不被Django的exception中间件捕捉 中间件
    从装修儿童房时的门锁说起
    欧拉定理 费马小定理的推广
    线性运算 非线性运算
    Optimistic concurrency control 死锁 悲观锁 乐观锁 自旋锁
    Avoiding Full Table Scans
    批量的单向的ssh 认证
    批量的单向的ssh 认证
    Corrupted MAC on input at /usr/local/perl/lib/site_perl/5.22.1/x86_64-linux/Net/SSH/Perl/Packet.pm l
  • 原文地址:https://www.cnblogs.com/it-deepinmind/p/14291591.html
Copyright © 2020-2023  润新知