基于centos 7 安装hadoop/hive/sqoop

转载 https://blog.csdn.net/junhuahouse/article/details/78177527  --hadoop

https://blog.csdn.net/pucao_cug/article/details/71773665  --hive

https://blog.csdn.net/pucao_cug/article/details/72083172  -- sqoop

在公司服务器上测试过,没什么太大的坑,一步一步就可以,只是sqoop 把mysql表导入 hive有点小问题,问题解决方案见

https://stackoverflow.com/questions/21599785/sqoop-not-able-to-import-table/21626010#21626010 

 

 

1.安装hadoop

    1.1 安装jdk ,配置环境变量vim  /etc/profile ,添加下面代码

export JAVA_HOME=xxxxx(jdk路径)
export CLASS_PATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

执行 source /etc/profile 使其生效

    1.2 下载hadoop ,https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.8.5/hadoop-2.8.5-src.tar.gz

测试使用的2.8.5版本,可到apache 首页搜索hadoop ,解压文件    tar -zxvf  xxxxxxxx.tar.gz

    vim /etc/profile ,追加配置代码

#set hadoop path
export HADOOP_HOME=xxxxxxxx(hadoop解压路径)
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

    执行source /etc/profile 

     可以通过 Hadoop version 查看版本

   1.3  配置hadoop 

     修改配置文件  ,在 $HADOOP_HOME/etc/hadoop 目录下有需要修改的配置文件

     1.3.1:   hadoop-env.sh

          把里面的 export JAVA_HOME=xxxxx(路径修改为jdk的路径)

     1.3.2   core-site.xml   configuration 标签内添加,注意端口占用

<configuration>
 <property>
  <name>hadoop.tmp.dir</name>
  <value>/hadoop</value>
 </property>
 <property>
  <name>hadoop.name.dir</name>
  <value>/hadoop/name</value>
 </property>
 <property>
  <name>fs.default.name</name>
  <value>hdfs://localhost.localdomain:9000</value>
 </property>
</configuration>

其中 fs.default.name 的value 值中间localhost.localdomain可以换成主机名

      1.3.3   hdfs-site.xml    configuration 标签内添加

<configuration>
 <property>
  <name>dfs.data.dir</name>
  <value>/hadoop/data</value>
 </property>
</configuration>

     1.3.4   mapred-site.xml     使用命令 cp mapred-site.xlm.template mapred-site.xlm 复制得到,修改内容,注意端口占用

<configuration>
<property>
  <name>mapred.job.tracker</name>
  <value>localhost.localdomain:9001</value>
</property>
</configuration>

在$HADOOP_HOME/bin 目录下执行

hadoop namenode -format

然后进入到$HADOOP_HOME/sbin 目录下执行 

./start-all.sh

验证: 输入 jps 即可看到启动的服务,包括Jps nameNode secondoryNameNode 等

 

也可在浏览器输入 http://xxxxxxx:8088 进行查看

 

关闭防火墙和禁止开机启动

systemctl stop firewalld.service     #停止firewall 
systemctl disabled firewalld.service      #禁止开机启动

 

 

2.安装 hive   转载https://blog.csdn.net/pucao_cug/article/details/71773665

2.1下载 hive ,http://hive.apache.org/downloads.html

apache-hive-2.3.3-bin.tar.gz

2.2 在opt目录下新建一个名为hive的目录,将apache-hive-2.1.1-bin.tar.gz拷贝上去

       执行进入目录的命令:

cd    /opt/hive

       执行解压缩的命令:

tar  -zxvf  apache-hive-2.3.3-bin.tar.gz

2.3 配置 vim /etc/profile  ,追加下面代码

#set hive path
export  HIVE_HOME=/opt/hive/apache-hive-2.3.3-bin
export  HIVE_CONF_DIR=${HIVE_HOME}/conf 
export  CLASS_PATH=${HIVE_HOME}/lib:$CLASS_PATH
export  PATH=${HIVE_HOME}/bin:$PATH 

 2.3.1 hive-site.xml 相关配置

进入到/opt/hive/apache-hive-2.3.3-bin/conf目录,命令是:

cd   /opt/hive/apache-hive-2.3.3-bin/conf

将hive-default.xml.template文件复制一份,并且改名为hive-site.xml,命令是:

cp   hive-default.xml.template   hive-site.xml

 

2.3.1.2使用hadoop新建hdfs目录

     因为在hive-site.xml中有这样的配置: 

 <name>hive.metastore.warehouse.dir</name>

  <value>/user/hive/warehouse</value>

   <name>hive.exec.scratchdir</name>

  <value>/tmp/hive</value>

       所以要让hadoop新建/user/hive/warehouse目录,执行命令:

$HADOOP_HOME/bin/hadoop   fs   -mkdir   -p   /user/hive/warehouse

       给刚才新建的目录赋予读写权限,执行命令:

$HADOOP_HOME/bin/hadoop   fs   -chmod   777   /user/hive/warehouse 

让hadoop新建/tmp/hive/目录,执行命令:

$HADOOP_HOME/bin/hadoop   fs   -mkdir  -p   /tmp/hive/

给刚才新建的目录赋予读写权限,执行命令:

$HADOOP_HOME/bin/hadoop   fs   -chmod  777   /tmp/hive

2.3.1.3检查hdfs目录是否创建成功

        检查/user/hive/warehouse   /tmp/hive 目录是否创建成功,执行命令:

$HADOOP_HOME/bin/hadoop   fs   -ls   /tmp/

$HADOOP_HOME/bin/hadoop   fs   -ls   /user/hive/

2.3.1.4修改hive-site.xml中的临时目录

将hive-site.xml文件中${system:java.io.tmpdir}替换为hive的临时目录,例如我替换为/opt/hive/tmp,该目录如果不存在则要自己手工创建,并且赋予读写权限。

将${system:user.name}都替换为root

2.3.1.5修改hive-site.xml数据库相关的配置

        搜索javax.jdo.option.ConnectionURL,将该name对应的value修改为MySQL的地址,例如我修改后是:

     <name>javax.jdo.option.ConnectionURL</name>  

     <value>jdbc:mysql://192.168.31.95:3306/hive?createDatabaseIfNotExist=true</value>

    

     搜索javax.jdo.option.ConnectionDriverName,将该name对应的value修改为MySQL驱动类路径,例如我的修改后是:

  <property> 

        <name>javax.jdo.option.ConnectionDriverName</name> 

        <value>com.mysql.jdbc.Driver</value> 

 </property>      

 

      搜索javax.jdo.option.ConnectionUserName,将对应的value修改为MySQL数据库登录名:

    <name>javax.jdo.option.ConnectionUserName</name>

    <value>root</value>

 

     搜索javax.jdo.option.ConnectionPassword,将对应的value修改为MySQL数据库的登录密码:

     <name>javax.jdo.option.ConnectionPassword</name>

     <value>cj</value>

 

      搜索hive.metastore.schema.verification,将对应的value修改为false:

    <name>hive.metastore.schema.verification</name>

     <value>false</value>

2.3.1.6将MySQL驱动包上载到lib目录

2.3.2新建hive-env.sh文件并进行修改

       进入到/opt/hive/apache-hive-2.3.3-bin/conf目录,命令是:

cd    /opt/hive/apache-hive-2.3.3-bin/conf

       将hive-env.sh.template文件复制一份,并且改名为hive-env.sh,命令是:

cp    hive-env.sh.template    hive-env.sh

 

       打开hive-env.sh配置并且添加以下内容:

export  HADOOP_HOME=/opt/hadoop/hadoop-2.8.0

export  HIVE_CONF_DIR=/opt/hive/apache-hive-2.3.3-bin/conf

export  HIVE_AUX_JARS_PATH=/opt/hive/apache-hive-2.3.3-bin/lib

3启动和测试

3.1对MySQL数据库进行初始化

         进入到hive的bin目录 执行命令:

  cd   /opt/hive/apache-hive-2.3.3-bin/bin

           对数据库进行初始化,执行命令:

  schematool   -initSchema  -dbType  mysql

2.4启动hive

      进入到hive的bin目录执行命令:

  cd   /opt/hive/apache-hive-2.3.3-bin/bin

       执行hive脚本进行启动,执行命令:

./hive

接下来就可以进行测试了,建库,建表...

 

 

3. hive

1下载Sqoop

         因为官方并不建议在生产环境中使用1.99.7版本,所以我们还是等2.0版本出来在用新的吧,现在依然使用1.4.6版本

打开官网:

http://sqoop.apache.org/

 

      如图:

 

 

点击上图的nearby  mirror

相当于是直接打开:http://www.apache.org/dyn/closer.lua/sqoop/

如图:

   

 

  我选择的是http://mirror.bit.edu.cn/apache/sqoop/ 

  如图:

    

点击1.4.6,相当于是直接打开地址:

http://mirror.bit.edu.cn/apache/sqoop/1.4.6/

如图:

 

    

2上载和解压缩

   

            在opt目录下新建一个名为sqoop的目录,将下载得到的文件sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar上载到该目录内

   如图:

     

 

  进入到该目录下,执行解压缩,也就是执行命令:

  cd    /opt/sqoop

  tar   -xvf    sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

  命令执行完成后得到了/opt/sqoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha目录

3一系列配置

3.1 配置环境变量

         编辑/etc/profile文件,添加SQOOP_HOME变量,并且将$SQOOP_HOME/bin添加到PATH变量中,编辑方法很多,可以将profile文件下载到本地编辑,也可以直接用vim命令编辑。

 

    添加的内容如下:

 

export  JAVA_HOME=/opt/java/jdk1.8.0_121

export  HADOOP_HOME=/opt/hadoop/hadoop-2.8.0

export  HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop

export  HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native

export  HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib"

export  HIVE_HOME=/opt/hive/apache-hive-2.1.1-bin

export  HIVE_CONF_DIR=${HIVE_HOME}/conf

export  SQOOP_HOME=/opt/sqoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha

export  CLASS_PATH=.:${JAVA_HOME}/lib:${HIVE_HOME}/lib:$CLASS_PATH

export  PATH=.:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin: ${HIVE_HOME}/bin:${SQOOP_HOME}/bin:$PATH

 

 /etc/profile文件编辑完成后,执行命令:

   source    /etc/profile

3.2   Sqoop配置文件修改

3.2.1  sqoop-env.sh文件

3.2.1.1 新建

       进入到/opt/sqoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/conf目录下,也就是执行命令:

cd     /opt/sqoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/conf

      将sqoop-env-template.sh复制一份,并取名为sqoop-env.sh,也就是执行命令:

cp    sqoop-env-template.sh  sqoop-env.sh

  如图:

     

3.2.1.2 编辑内容

      编辑这个新建的sqoop-env.sh文件,编辑方法有很多,可以下载到本地编辑,也可是使用vim命令编辑。

       在该文件末尾加入下面的配置:

export  HADOOP_COMMON_HOME=/opt/hadoop/hadoop-2.8.0

export  HADOOP_MAPRED_HOME=/opt/hadoop/hadoop-2.8.0

export  HIVE_HOME=/opt/hive/apache-hive-2.1.1-bin

 

       说明:上面的路径修改为自己的hadoop路径和hive路径。

3.3 将MySQL驱动包上载到Sqoop的lib下

         将MySQL的驱动包上载到Sqoop安装目录的lib子目录下

如图:

     

 

           说明:该驱动不是越旧越好,也不是越新越好,5.1.31我这里测试是可以的。

 

4  使用sqoop

       sqoop是一个工具,安装完成后,如果操作的命令不涉及hive和hadoop的,可以实现不启动hive和hadoop,直接输入sqoop命令即可,例如sqoop help命令。要使用hive相关的命令,必须事先启动hive和hadoop。

hadoop的安装和启动可以参考该博文:

           http://blog.csdn.net/pucao_cug/article/details/71698903

hive的安装和启动可以参考该博文:

          http://blog.csdn.net/pucao_cug/article/details/71773665

4.1  使用help命令

         首先看看sqoop都有哪些命令,在终上输入命令:

sqoop  help

如图:

    

 

上图中的内容是:

 

[root@hserver1 ~]# sqoop  help
Warning:/opt/sqoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/../hbase does not exist! HBaseimports will fail.
Please set $HBASE_HOME to the root of yourHBase installation.
Warning:/opt/sqoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/../hcatalog does not exist! HCatalogjobs will fail.
Please set $HCAT_HOME to the root of yourHCatalog installation.
Warning:/opt/sqoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/../accumulo does not exist!Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root ofyour Accumulo installation.
Warning:/opt/sqoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/../zookeeper does not exist!Accumulo imports will fail.
Please set $ZOOKEEPER_HOME to the root ofyour Zookeeper installation.
17/05/14 16:21:30 INFO sqoop.Sqoop: RunningSqoop version: 1.4.6
usage: sqoop COMMAND [ARGS]
 
Available commands:
 codegen            Generate codeto interact with database records
 create-hive-table  Import a tabledefinition into Hive
 eval               Evaluate a SQLstatement and display the results
  export             Export an HDFS directory to adatabase table
 help               List availablecommands
 import             Import a tablefrom a database to HDFS
 import-all-tables  Import tablesfrom a database to HDFS
 import-mainframe   Import datasetsfrom a mainframe server to HDFS
 job                Work with savedjobs
 list-databases     List availabledatabases on a server
 list-tables        List availabletables in a database
 merge              Merge resultsof incremental imports
 metastore          Run astandalone Sqoop metastore
 version            Display versioninformation
 
See 'sqoop help COMMAND' for information ona specific command.
[root@hserver1 ~]#

 

 

      说明:因为我们没有基于hadoop安装HBase,所以HBase相关的命令不能用,但是操作hadoop分布式文件系统的命令是可以用的。

....

错误1

再导入mysql 表到hive 的时候会报classNotFound 错误,参考 https://blog.csdn.net/quiet_girl/article/details/75160045

https://stackoverflow.com/questions/21599785/sqoop-not-able-to-import-table/21626010#21626010

错误原因:
因为在使用sqoop import命令时,生成的java文件会默认产生在当前目录下,而产生的.jar文件和.class文件会默认存放在/tmp/sqoop-/compile下,两者不在同一文件目录下,导致错误。所以,我们需要将java文件,.jar文件和.class文件放在同一目录下。
解决方法:
为了使数据不存放在根目录下,将产生的文件放在/opt/Hadoop/sqoop-1.4.6/tmp下,我们需要切换至/opt/Hadoop/sqoop-1.4.6/tmp目录下,使用如下命令:

cd /opt/Hadoop/sqoop-1.4.6/tmp
sqoop import --bindir ./ --connect jdbc:mysql://localhost:3306/hadoopguide --username root --password root --table widgets
  • 1
  • 2

执行后结果如下:
这里写图片描述
查看HDFS,发现mysql的widgets表格内容已经导入:
这里写图片描述

 

错误2

ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")

https://blog.csdn.net/xuhao1233344/article/details/79992983

java 的安全策略问题:找到jre包, /Java/jre/lib/security  包下面的 java.policy 文件,编辑他,加上如下 代码

permission javax.management.MBeanTrustPermission "register";

错误3

ERROR exec.DDLTask: java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.ObjectMapper.readerFor(Ljava/lang/Class;)Lcom/fasterxml/jackson/databind/ObjectReader;

把$SQOOP_HOME/lib/jackson*.jar 文件bak, 把对应的$HIVE_HOME/lib/jackson*.jar 对应拷贝到SQOOP/lib 下. 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值