Ubuntu+Hadoop+Mysql+Hive+Sqoop

环境配置说明:

软件 版本
VirtualBox 6.1
Ubuntu 16.04
Hadoop 2.7.7
MySql 5.7.29
MySql驱动 5.1.46
Hive 2.3.6
sqoop 1.4.7

一、hadoop集群配置以及HDFS命令学习

参考依据:
《python+spark2.0+hadoop机器学习与大数据实战》的第2到6章
(这本书在网上一搜便可以搜到pdf版。傻瓜式教学,跟着一步步安装即可)

1、跟书中不同的安装配置说明:

(1)VirtualBox 6.1

这是目前的最新版本,我的电脑是64位,所以下载了6.1版本,如果您的电脑是32位,应当去下载5.2版本里面32位对应的软件。

(2)Ubuntu 16.04

目前最新版本是18.04,但是不知道稳不稳定,保险起见就装的16.04。我设置的用户名为zdx,后续命令行中只要出现zdx,就是我的名字,不要跟着乱敲,你需要换成你自己的名字。

(3)Hadoop 2.7.7

我下载目前最新版的hadoop3.X,在后续的环境配置中遇到了各种各样的错误,比如hadoop启动不了,越改越错,花了很长时间,所以最后死马当活马医,就换了低版本的,就没问题了。

(4)hadoop集群

虚拟机名称 IP地址
master 192.168.56.114
data1 192.168.56.111
data2 192.168.56.112
data3 192.168.56.113

2、安装期间遇到的问题以及解决方法:

需要注意的是第一个碰到的也是最大的一个错误是SSH免密登录问题。
跟着书本设置完ssh之后,记得一定执行命令 ssh localhost,检查是否设置成功。如果让你输密码,就说明设置失败。在我的电脑上ssh免密设置失败的后续问题是:这个问题不会影响hadoop伪分布式的启动,但是会直接影响到hadoop集群的启动,会有虚拟机的datanode启动不了,而且我在hadoop集群上改这个问题,也是越改越错,因为要改四个虚拟机,而且主机和客机改的内容还不一样,很麻烦,越麻烦越出错,越出错越麻烦,所以一定要从一开始就保证ssh能够免密登录。
这是我遇到的问题以及解决方法

二、MySql5.7.29安装

我是跟着这位大佬配置的,她写的很详细。
ubuntu安装mysql

三、Hive2.3.6安装

(只在master上安装,前期只启动master一个虚拟机即可,后期需要启动hadoop集群,所有的命令都在master上输入)
(1)首先只启动master。
为了避免下Hive下到一半出现段错误,先扩容:

ulimit -s 102400

(2)下载Hive

wget  https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.6/ apache-hive-2.3.6-bin.tar.gz

(3)解压

sudo tar -zxvf   apache-hive-2.3.6-bin.tar.gz

(4)移动apache-hive-2.3.6-bin到/usr/local/hive

sudo mv apache-hive-2.3.6-bin   /usr/local/hive

(5)修改文件权限

sudo  chown  -R  zdx:zdx   usr/local/hive

(6)新建目录tmp

mkdir  -p  /usr/local/hive/tmp

(7)添加环境变量

sudo   gedit   ~/.bashrc

在文件中添加:

export  HIVE_HOME=/usr/local/hive 
export  PATH=$PATH:$HIVE_HOME/bin

(8)使配置生效

source   ~/.bashrc

(9)切换目录(一定要切换目录,第10,11步都在该目录下进行)

cd  /usr/local/hive/conf

(10)将hive-env.sh.template重命名为hive-env.sh

sudo  mv  hive-env.sh.template  hive-env.sh

(11)在hive-env.sh中分别找到下面3个大写英文的位置,之后删除这一行前面的#,并对=后面的东西进行修改:

sudo gedit  hive-env.sh

在文件中添加:

# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/usr/local/hadoop
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/usr/local/hive/conf
# Folder containing extra ibraries required for hive compilation/execution can be controlled by:
export HIVE_AUX_JARS_PATH=/usr/local/hive/lib

(12)接下来就需要启动hadoop集群
先返回根目录,输入命令:cd
之后启动data1,data2,data3
然后在master虚拟机命令行里输入start-all.sh
(13)在hdfs上创建相关仓库,并配置权限:

hadoop  fs  -mkdir  -p  /user/hive/warehouse 
hadoop  fs  -mkdir  -p  /user/hive/tmp 
hadoop  fs  -mkdir  -p  /user/hive/log 
hadoop  fs  -chmod  -R  777 /user/hive/warehouse
hadoop  fs  -chmod  -R  777 /user/hive/tmp
hadoop  fs  -chmod  -R  777 /user/hive/log

(14)修改hive-site.xml的主要内容

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

文件需要修改或添加的内容:

<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
    <description>location of default database for the warehouse</description>
</property>

<property>  
    <name>hive.exec.scratchdir</name>  
    <value>/user/hive/tmp</value>  
</property>  

<property>
    <name>hive.querylog.location</name>
    <value>/user/hive/log/hadoop</value>
    <description>Location of Hive run time structured log file</description>
</property> 

<property> 
    <name>javax.jdo.option.ConnectionURL</name> 
    <value>jdbc:mysql://192.168.56.114:3306/hive?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value> 
</property>

<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
</property>

<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    <description>username to use against metastore database</description>
</property>

<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>zdx123</value>
    <description>password to use against metastore database</description>
</property>

<property>
    <name>system:java.io.tmpdir</name>
    <value>/usr/local/hive/tmp</value>
</property>

<property>
    <name>system:user.name</name>
    <value>root</value>
</property>

(如果实在搜索不到,就直接在文本末尾手动添加所需要的变量,一共9处需要修改或添加的地方,改成上面代码那样的)
(但是,javax.jdo.option.connectionURL下面你要将我的“192.168.56.114”改成你自己MySQL的地址;
javax.jdo.option.ConnectionUserName下面你要将我的登录名“root”改成你自己的MySQL数据库登录名;
javax.jdo.option.ConnectionPassword下面你要将我的密码“zzdx123”改成你自己的MySQL数据库的登录密码)
(补充一点:
vi命令大全
以hive.metastore.warehouse.dir为例:
在文本中随意一个位置输入“/”,在/后面输入hive.metastore.warehouse.dir,回车,如果该文本里有好几个hive.metastore.warehouse.dir,按n挨个向下寻找,找出要修改的那个,按x是删除,按a是编辑,按:w是保存,按:q是退出)
(15)配置驱动(mysql jdbc,本文使用5.1.46版本),命令行下载:

sudo  wget  https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz

(16)解压:

sudo  tar  -zxvf   mysql-connector-java-5.1.46.tar.gz

(17)移动到hive/lib目录下

sudo  cp  mysql-connector-java-5.1.46/mysql-connector-java-5.1.46/ mysql-connector-java-5.1.46-bin.jar     /usr/local/hive/lib

(18)初始化

cd   /usr/local/hive/bin
schematool    -dbType    mysql    -initSchema 

(看到屏幕上显示schemaTool completed,就说明初始化成功了)
(19)在/usr/local/hive/bin下启动hive

hive

(20)参考这位大佬写的第五步及之后的内容来测试hive是否安装正确
启动hive及测试

四、Sqoop1.4.7安装

(启动hadoop集群,之后只在master上操作)
(1)为了避免下Hive下到一半出现段错误,先扩容:

ulimit   -s   102400

(2)下载Sqoop

wget  http://archive.apache.org/dist/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

(3)解压

sudo  tar  -zxvf  sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

(4)移动位置

sudo  mv  sqoop-1.4.7.bin__hadoop-2.6.0  /usr/local/sqoop

(5)对sqoop目录进行赋权

sudo  chown  -R  zdx:zdx  /usr/local/sqoop

(6)添加环境变量

sudo  gedit  ~/.bashrc

修改文件内容:

#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/opt/hadoop-2.7.3

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/opt/hadoop-2.7.3

#set the path to where bin/hbase is available
#export HBASE_HOME=

#Set the path to where bin/hive is available
export HIVE_HOME=/opt/hive

#Set the path for where zookeper config dir is
#export ZOOCFGDIR=

(上面的内容要按照实际情况修改,另外,你还装了Hbase和Zookeeper则也要在等号后面添加配置)

(7)复制相关依赖包$SQOOP_HOME/lib,主要复制下面两个文件。

cp mysql-connector-java-5.1.46/mysql-connector-java-5.1.46/ mysql-connector-java-5.1.46-bin.jar   /usr/local/sqoop/lib 
cp /usr/local/hadoop/share/hadoop/common/hadoop-common-2.7.3.jar /usr/local/sqoop/lib 

(8)修改/usr/local/sqoop/bin/configure-sqoop

sudo  gedit  /usr/local/sqoop/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

(9) 测试与mysql的连接
首先确保mysql在运行:

sudo  service  mysql  start

然后测试是否连通:

sqoop list-databases --connect jdbc:mysql://192.168.56.114:3306/ --username root -P

(192.168.56.114是我的master的IP地址,也是我的MySql地址,你需要换成你自己的MySql地址;
注意最后的P是大写)
输入密码后如果能显示你mysql上的数据库,则表示已经连通,如下图所示:
Ubuntu+Hadoop+Mysql+Hive+Sqoop_第1张图片
至此就配置完成啦!!!

最后特别感谢这些大佬:
https://www.cnblogs.com/opsprobe/p/9126864.html
https://segmentfault.com/a/1190000011303459
https://www.cnblogs.com/standingby/p/10039974.html
https://www.cnblogs.com/harrymore/p/9056863.html

你可能感兴趣的:(Ubuntu+Hadoop+Mysql+Hive+Sqoop)