sqoop1.4.6安装配置

sqoop安装配置

一、介绍
Apache Sqoop(TM) is a tool designed for efficiently transferring bulk data between Apache Hadoop and structured datastores such as relational databases.
http://sqoop.apache.org/

二、软件
hadoop-2.4.1

sqoop-1.4.6
http://www.apache.org/dyn/closer.lua/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

三、资料
Documents
Sqoop User Guide
http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html

Sqoop Developer’s Guide v1.4.6
http://sqoop.apache.org/docs/1.4.6/SqoopDevGuide.html

Api
http://sqoop.apache.org/docs/1.4.6/api/index.html

四、安装
gtar -zxvf /root/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz /usr/local/
cd /usr/local
ln -s sqoop-1.4.4.bin__hadoop-2.0.4-alpha sqoop

五、环境变量
/etc/profile

export MAVEN_HOME=/usr/local/maven
export JAVA_HOME=/root/jdk1.8
export PROTOC_HOME=/tmp/protobuf-2.5.0
export SQOOP_HOME=/usr/local/sqoop-1.4.6
export ZOOKEEPER=/usr/local/zookeeper

# Hadoop 
export HADOOP_PREFIX="/usr/local/hadoop" 
export HADOOP_HOME=${HADOOP_PREFIX} 
export PATH=$PATH:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
export HADOOP_COMMON_HOME=${HADOOP_PREFIX} 
export HADOOP_HDFS_HOME=${HADOOP_PREFIX} 
export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}
export HADOOP_YARN_HOME=${HADOOP_PREFIX}

# Native Path 
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native 
export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib/native"
# Hadoop end
 
#Hive
export HIVE_HOME=/usr/local/hive
export PATH=$HIVE_HOME/bin:$PATH
 
#HBase
export HBASE_HOME=/usr/local/hbase
export PATH=$HBASE


sqoop/bin/configure-sqoop里面的如下三段内容注释掉
#if [ -z "${HBASE_HOME}" ]; then
#  if [ -d "/usr/lib/hbase" ]; then
#    HBASE_HOME=/usr/lib/hbase
#  else
#    HBASE_HOME=${SQOOP_HOME}/../hbase
#  fi
#fi
#if [ -z "${HCAT_HOME}" ]; then
#  if [ -d "/usr/lib/hive-hcatalog" ]; then
#    HCAT_HOME=/usr/lib/hive-hcatalog
#  elif [ -d "/usr/lib/hcatalog" ]; then
#    HCAT_HOME=/usr/lib/hcatalog
#  else
#    HCAT_HOME=${SQOOP_HOME}/../hive-hcatalog
#    if [ ! -d ${HCAT_HOME} ]; then
#       HCAT_HOME=${SQOOP_HOME}/../hcatalog
#    fi
#  fi
#fi
#if [ -z "${ACCUMULO_HOME}" ]; then
#  if [ -d "/usr/lib/accumulo" ]; then
#    ACCUMULO_HOME=/usr/lib/accumulo
#  else
#    ACCUMULO_HOME=${SQOOP_HOME}/../accumulo
#  fi
#fi


六、配置Sqoop参数

复制<SQOOP_HOME>/conf/sqoop-env-template.sh文件重命名<SQOOP_HOME>/conf/sqoop-env.sh

vi  <SQOOP_HOME>/conf/sqoop-env.sh
# 指定各环境变量的实际配置
如果/etc/profile已经配置,这个文件配置可以忽略


七、下载jjbc驱动
 把jdbc驱动放到<SQOOP_HOME>/lib目录下
oracle的驱动是ojdbc6.jar
http://www.micmiu.com/bigdata/sqoop/sqoop-setup-and-demo/

八、导入SCOTT用户EMP表的所有字段
//注意:EMP一定要大写
sqoop import --connect jdbc:oracle:thin:@192.168.1.100:1521:ORCL --username SCOTT --password tiger --table EMP -m 1;

查看执行结果:
#hadoop fs -ls EMP
-rw-r--r--   3 root supergroup          0 2016-01-28 14:05 EMP/_SUCCESS
-rw-r--r--   3 root supergroup        115 2016-01-28 14:05 EMP/part-m-00000
-rw-r--r--   3 root supergroup        117 2016-01-28 14:05 EMP/part-m-00001
-rw-r--r--   3 root supergroup        238 2016-01-28 14:05 EMP/part-m-00002
-rw-r--r--   3 root supergroup        347 2016-01-28 14:05 EMP/part-m-00003

# hadoop fs -cat EMP/part-m-00000
7369,SMITH,CLERK,7902,1980-12-17 00:00:00.0,800,null,20
7499,ALLEN,SALESMAN,7698,1981-02-20 00:00:00.0,1600,300,30

说明:
1)默认导入到HDFS的路径是:/user/hadoop(用户名)/EMP (表名),如果EMP目录已经存在,则报错;
需要先删除已经存在的目录:hadoop fs -rm /user/hadoop/EMP;
如果相同的命令导入多次,也会报错的,需要先删除已经存在的目录;
2)-m 1表示使用几个map任务处理,sqoop默认采用4个map任务,有几个任务在HDFS的执行结果中就有几个part-m;
3)sqoop默认从数据库导入到HDFS的分隔符是逗号;
4)空列的值使用null;
5)sqoop中的map数设置原则:一个表的数据抽取不超过3分钟,否则就增加map数;


九、导入表的指定字段并指定目标地址
sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT --password  tiger \
--table EMP  \
--columns "EMPNO,ENAME,JOB,SAL,COMM" \
--target-dir EMP_COLUMN  -m 1;


说明:
1)通过--target-dir指定导入到HDFS的具体位置;
2)通过--columns指定需要导入的列;

十、导入表的指定字段并指定目标地址使用指定的分隔符
sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT --password tiger \
--table EMP  \
--columns "EMPNO,ENAME,JOB,SAL,COMM" \
--target-dir EMP_COLUMN_SPLIT \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '' --null-non-string '0'  -m 2;

由于这里使用了2个map任务,所以在hdfs的文件中就有了2个part; 由于COMM是NUMBER类型,所以HDFS中就是0。
说明:
1)--null-string '': 当string类型的字段为空时,使用''代替
2)--null-non-string 0 : 当非string类型的字段为空时,使用0代替,项目中不常使用这个配置。
3)--fields-terminated-by '\t':字段之间采用tab分隔
4)--lines-terminated-by '\n':行之间采用回车分隔


十、根据条件导入数据

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT --password tiger \
--table EMP  \
--columns "EMPNO,ENAME,JOB,SAL,COMM" \
--target-dir EMP_COLUMN_WHERE \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--where 'SAL>2000' \
--null-string '' --null-non-string '0'  -m 1 ;


十一、保护数据库密码方式

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT  \
--target-dir EMP_COLUMN_PASSWORD1 \
--table EMP -m 1 \
-P;

Enter password:

//密码放置到一个文件中
sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT \
--table EMP \
--target-dir EMP_COLUMN_PASSWORD2 \
--password-file /home/hadoop/my-sqoop-password  -m 1 ; 


十二、更改导入文件格式
sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT --password tiger \
--table EMP -m 1 \
--target-dir EMP_SEQUENCEFILE \
--as-sequencefile ;


sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT --password tiger \
--table EMP -m 1 \
--target-dir EMP_AVRODATAFILE \
--as-avrodatafile  ;


十三、增量数据导入
sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT --password tiger \
--table EMP -m 1 \
--target-dir EMP_APPEND \
--incremental append \
--check-column EMPNO \
--last-value 7788  ;


十四、导入没有主键的表到HDFS中
//表SALGRADE为例
sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \
--username SCOTT --password tiger \
--table SALGRADE  \
--target-dir SALGRADE \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '' --null-non-string '0'  -m 2;


十五、文件脚本导入命令
编辑emp.opt
import 
--connect
jdbc:oracle:thin:@192.168.1.100:1521:ORCL
--username
SCOTT
--password
tiger
--table
EMP
--target-dir
EMP_OPTIONS_FILE
-m

sqoop --options-file ./emp.opt


错误处理
1、
//sqoop/bin/configure-sqoop里面的如下三段内容注释掉
Warning: /usr/local/sqoop-1.4.6/../hbase does not exist! HBase imports will fail.
Please set $HBASE_HOME to the root of your HBase installation.
Warning: /usr/local/sqoop-1.4.6/../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /usr/local/sqoop-1.4.6/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation


2、
//这个原因是因为:-username micmiu 用户名这个参数, 需要把用户名大写:-username MICMIU ,再执行就ok了
16/01/28 11:57:43 ERROR tool.ImportTool: Imported Failed: There is no column found in the target table merchant. Please ensure that your table name is correct.

3、
报错:
ERROR tool.ImportTool: Error during import: No primary key could be found for table SALGRADE. Please specify one with
--split-by or perform a sequential import with '-m 1'.
原因是没有找到主键,详见《数据库导入到HDFS原理》,解决办法如下:
1)添加主键;
2)使用--split-by ' GRADE';
3)使用-m 1,m为几那么在HDFS上就会生成几个文件,就不存在按照字段拆分多个任务的问题;


转载于:https://my.oschina.net/jimyao/blog/611038

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值