1. 1. 1.SSH安装及免密配置
  2. 2. 2.JDK配置
    1. 2.1. 2.1.解压安装
    2. 2.2. 2.2.设置环境变量
  3. 3. 3.Hadoop伪分布式配置
  4. 4. 4.Spark配置
    1. 4.1. 4.1.安装所需软件包
    2. 4.2. 4.2.下载 Apache Spark
    3. 4.3. 4.3.解压安装
    4. 4.4. 4.4.使hadoop和spark建立联系
    5. 4.5. 4.5.编辑profile配置文件
    6. 4.6. 4.6.启动spark
  5. 5. 5.Zookeeper配置
    1. 5.1. 5.1.下载安装包
    2. 5.2. 5.2.解压安装
    3. 5.3. 5.3.配置文件zoo.cfg
    4. 5.4. 5.4.配置
    5. 5.5. 5.5.ip地址填写为ubuntu的主机地址
    6. 5.6. 5.6.编辑profile配置文件
    7. 5.7. 5.7.启动/关闭zookeeper
  6. 6. 6.Hbase配置
    1. 6.1. 6.1.确保版本依赖对应
    2. 6.2. 6.2.解压安装
    3. 6.3. 6.3.配置环境变量
    4. 6.4. 6.4.伪分布式模式配置
    5. 6.5. 6.5.配置/usr/local/hbase/conf/hbase-site.xml
    6. 6.6. 6.6.测试运行HBase
    7. 6.7. 6.7.注意
  7. 7. 7.Mysql配置
    1. 7.1. 7.1.安装Mysql
    2. 7.2. 7.2.初始化配置
    3. 7.3. 7.3.检查Mysql服务状态
    4. 7.4. 7.4.配置远程访问
    5. 7.5. 7.5.Mysql8.x.x配置JDBC
    6. 7.6. 7.6.使用pyspark连接mysql数据库
    7. 7.7. 7.7.Mysql命令
    8. 7.8. 7.8.Mysql登录报错解决方案
    9. 7.9. 7.9.sqoop导入MySQL中文乱码解决方案
  8. 8. 8.Mongodb配置
    1. 8.1. 8.1.配置安装
    2. 8.2. 8.2.启动和关闭MongoDB
    3. 8.3. 8.3.尾巴
  9. 9. 9.Hive配置
    1. 9.1. 9.1.下载Hive-3.1.2
    2. 9.2. 9.2.解压安装
    3. 9.3. 9.3.配置环境变量
    4. 9.4. 9.4.创建编辑hive-site.xml
    5. 9.5. 9.5.添加以下代码
    6. 9.6. 9.6.创建两个对应的目录并赋予读写权限
    7. 9.7. 9.7.注意不同版本的数据库对应不同数据库的驱动类名称
    8. 9.8. 9.8.配置hive-env.sh文件
    9. 9.9. 9.9.将JDBC的jar包拷贝在/usr/local/hive/lib目录下
    10. 9.10. 9.10.在/usr/local/hive/bin目录下执行以下命令
    11. 9.11. 9.11.注意
    12. 9.12. 9.12.报错原因
      1. 9.12.1. 9.12.1.报错原因1
      2. 9.12.2. 9.12.2.报错原因2
    13. 9.13. 9.13.尾巴
  10. 10. 10.Sqoop配置
    1. 10.1. 10.1.下载sqoop1.4.7
    2. 10.2. 10.2.解压安装
    3. 10.3. 10.3.配置环境变量
    4. 10.4. 10.4.修改配置文件sqoop-env.sh
    5. 10.5. 10.5.验证Sqoop安装
    6. 10.6. 10.6.将mysql驱动包拷贝到$SQOOP_HOME/lib
    7. 10.7. 10.7.测试与MySQL的连接
    8. 10.8. 10.8.报错解决
  11. 11. 11.尾巴

基于Ubuntu20.04搭建伪分布式Hadoop生态圈

1.SSH安装及免密配置

集群、单节点模式都需要用到SSH登陆,Ubuntu默认已安装了SSH client,此外还需要安装SSH server

输入如下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#更新源
sudo apt-get update

#一般的ubuntu不自带服务器的ssh,都有客服端的ssh,需要安装服务器端的ssh
sudo apt-get install openssh-server

#启动ssh
ssh localhost

#下面配置无密码ssh登录

#若没有该目录,请先执行一次ssh localhost,~表示用户的主文件夹
cd ~/.ssh/

# 会有提示,一直按回车就可以
ssh-keygen -t rsa

# 加入授权
cat ./id_rsa.pub >> ./authorized_keys

此时再用ssh localhost命令,无需输入密码就可以直接登陆了。


2.JDK配置

进入Java Downloads | Oracle下载页面。(建议使用JDK1.8)

根据Linux系统的位数选择要下载的压缩包。

执行命令:

1
getconf LONG_BIT

如果显示32,则是23位的Linux系统,如果显示64,则是64位的Linux系统。这里是64位的,所以下载Linux x64

下载需要注册Oracle的账号,注册邮箱推荐网易邮箱

注:JDK8或者JDK1.8是由于自从JDK1.5/JDK5命名方式改变后遗留的新旧命令方式问题。所以JDK8和JDK1.8等价。

2.1.解压安装

  1. 创建安装目录

    1
    mkdir /usr/local/java/
  2. 解压缩到安装目录

    1
    2
    #注意下载的jdk版本
    sudo tar -zxvf jdk-8u231-linux-x64.tar.gz -C /usr/local/java/
  3. 解压缩以后,进入/usr/local/java/目录后,你会发现多一个目录,它就是JDK所在目录。JDK版本不同,这个目录名有所不同,这里是jdk1.8.0_231,那么完整路径就是**/usr/local/java/jdk1.8.0_231**。

2.2.设置环境变量

  1. 编辑变量

    1
    sudo vim ~/.profile
  2. 编辑模式下输入配置的环境变量

    1
    2
    3
    4
    5
    #set java1.8
    export JAVA_HOME=/usr/local/java/jdk1.8.0_231
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=.:${JAVA_HOME}/bin:$PATH
  3. 使环境变量生效

    1
    source ~/.profile
  4. 查看Java版本信息

    1
    java -version
  5. 得到输出结果

    1
    2
    3
    java version "1.8.0_231"
    Java(TM) SE Runtime Environment (build 1.8.0_231-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.231-b12, mixed mode)

3.Hadoop伪分布式配置

可参照历史博文


4.Spark配置

4.1.安装所需软件包

1
sudo apt install curl mlocate git scala -y

4.2.下载 Apache Spark

更多最新版本可以查看官方下载页面

1
curl -O https://archive.apache.org/dist/spark/spark-3.2.1/spark-3.2.1-bin-hadoop3.2.tgz

4.3.解压安装

1
2
3
4
5
6
7
8
9
10
#解压文件
sudo tar -zxf spark安装包 -C /usr/local/

cd /usr/local

#将解压后的文件重命名为spark
sudo mv ./spark-3.2.1 ./spark

#设置用户权限,-R后的参数表示计算机用户名
sudo chown -R 用户名 ./spark

4.4.使hadoop和spark建立联系

1
2
3
4
5
6
7
8
9
cd /usr/local/spark

cp ./conf/spark-env.sh.template ./conf/spark-env.sh

#编辑spark-env.sh文件
sudo vim ./conf/spark-env.sh

#在文件最后一行加入:(来使hadoop和spark建立联系)
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop-3.2.2/bin/hadoop classpath)

4.5.编辑profile配置文件

增加spark安装目录到系统路径

1
2
3
4
5
6
7
8
sudo vim ~/.profile

#添加下面两行到文件并保存
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

#保存文件并生效
source ~/.profile

4.6.启动spark

1
2
#在/usr/local/spark/目录下输入命令即可启动
./bin/pyspark

5.Zookeeper配置

5.1.下载安装包

通过官方下载页面下载

5.2.解压安装

1
2
3
4
5
#解压文件
sudo tar -zxf apache-zookeeper-3.6.3-bin.tar.gz -C /usr/local

#将解压后的文件重命名为zookeeper
sudo mv ./apache-zookeeper-3.6.3-bin ./zookeeper

5.3.配置文件zoo.cfg

1
2
#将解压后zookeeper目录下的conf目录下的zoo_sample.cfg文件重命名为zoo.cfg
mv zoo_sample.cfg zoo.cfg

5.4.配置

这里是配置单机模式,也就是只有一个机器的集群,所以server只要配置一个即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# The number of milliseconds of each tick  

#这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔
tickTime=2000

# The number of ticks that the initial 
# synchronization phase can take

#配置 Zookeeper 接受客户端初始化连接时最长能忍受多少个心跳时间间隔数。
initLimit=10

# The number of ticks that can pass between 
# sending a request and getting an acknowledgement

#Leader 与 Follower 之间发送消息,请求和应答时间长度
syncLimit=5

# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
# dataDir=/tmp/zookeeper

#数据目录需要提前创建
dataDir=/usr/local/zookeeper/data

#日志目录需要提前创建
dataLogDir=/usr/local/zookeeper/log

# the port at which the clients will connect

#访问端口号
clientPort=2181

# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

#server.每个节点服务编号=服务器ip地址:集群通信端口:选举端口
server.1=ip地址:2888:3888
#server.2=slave1.hadoop.com:2888:3888
#server.3=slave2.hadoop.com:2888:3888

5.5.ip地址填写为ubuntu的主机地址

1
ifconfig

5.6.编辑profile配置文件

增加zookeeper安装目录到系统路径

1
2
3
4
5
6
7
8
sudo vim ~/.profile

#添加下面两行到文件并保存
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=${ZOOKEEPER_HOME}/bin:$PATH

#保存文件并生效
source ~/.profile

5.7.启动/关闭zookeeper

1
2
3
4
5
6
7
8
#启动
./zkServer.sh start

#查看状态
zkServer.sh status

#关闭
./zkServer.sh stop

6.Hbase配置

6.1.确保版本依赖对应

在安装HBase之前,因HBase对Hadoop具有版本依赖性,故需确保已经安装了Hadoop3.x.x。

6.2.解压安装

1
2
3
4
5
6
7
8
#解压安装包hbase-2.2.2-bin.tar.gz至路径 /usr/local
sudo tar -zxf ~/下载/hbase-2.2.2-bin.tar.gz -C /usr/local

#将解压后的文件重命名为hbase
sudo mv ./hbase-2.2.2 ./hbase

#设置用户权限,-R后的参数表示计算机用户名
sudo chown -R 用户名 ./hbase

6.3.配置环境变量

1
2
3
4
5
6
7
8
9
10
11
12
#将hbase下的bin目录添加到path中,启动hbase时便无需到/usr/local/hbase目录下启动
sudo vim ~/.profile

#添加下面两行到文件并保存
export PATH=$PATH:/usr/local/hbase/bin
export PATH=${JAVA_HOME}/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin:$PATH

#保存文件并生效
source ~/.profile

#查看HBase版本,确定hbase安装成功
/usr/local/hbase/bin/hbase version

6.4.伪分布式模式配置

1
2
3
4
5
6
sudo vim /usr/local/hbase/conf/hbase-env.sh

#配置JAVA_HOME,HBASE_CLASSPATH,HBASE_MANAGES_ZK.
export JAVA_HOME=/usr/local/java/jdk1.8.0_231
export HBASE_CLASSPATH=/usr/local/hbase/conf
export HBASE_MANAGES_ZK=true

6.5.配置/usr/local/hbase/conf/hbase-site.xml

1
sudo vim /usr/local/hbase/conf/hbase-site.xml

修改hbase.rootdir,指定HBase数据在HDFS上的存储路径;将属性hbase.cluter.distributed设置为true。假设当前Hadoop集群运行在伪分布式模式下,在本机上运行,且NameNode运行在9000端口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration>

6.6.测试运行HBase

  1. 首先登陆ssh,再切换目录至/usr/local/hadoop ;再启动hadoop,如果已经启动hadoop请跳过此步骤。

    1
    2
    3
    4
    5
    ssh localhost

    cd /usr/local/hadoop

    ./sbin/start-dfs.sh
  2. 切换目录至/usr/local/hbase;再启动HBase。

    1
    2
    3
    cd /usr/local/hbase

    bin/start-hbase.sh
  3. 输入命令jps,看到以下界面说明hbase启动成功

    1
    2
    3
    4
    5
    6
    7
    Jps
    HMaster
    HQuorumPeer
    NameNode
    HRegionServer
    SecondaryNameNode
    DataNode
  4. 进入shell界面

    1
    bin/hbase shell
  5. 停止HBase运行

    1
    bin/stop-hbase.sh

6.7.注意

  1. 如果在操作HBase的过程中发生错误,可以通过{HBASE_HOME}目录(/usr/local/hbase)下的logs子目录中的日志文件查看错误原因。

  2. 这里启动关闭Hadoop和HBase的顺序一定是: 启动Hadoop—>启动HBase—>关闭HBase—>关闭Hadoop


7.Mysql配置

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下产品。MySQL最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System,关系数据库管理系统) 应用软件之一。

7.1.安装Mysql

1
2
3
4
5
#更新软件源
sudo apt-get update

#安装mysql
sudo apt-get install mysql-server

7.2.初始化配置

1
sudo mysql_secure_installation
  1. 取消对密码的强校验

    1
    2
    VALIDATE PASSWORD PLUGIN can be used to test passwords...
    Press y|Y for Yes, any other key for No: N (选择N ,不会进行密码的强校验)
  2. 设置密码

    1
    2
    3
    Please set the password for root here...
    New password: (输入密码)
    Re-enter new password: (重复输入)
  3. 不删除匿名用户

    1
    2
    3
    4
    By default, a MySQL installation has an anonymous user,
    allowing anyone to log into MySQL without having to have
    a user account created for them...
    Remove anonymous users? (Press y|Y for Yes, any other key for No) : N (选择N,不删除匿名用户)
  4. 允许root远程连接

    1
    2
    3
    4
    Normally, root should only be allowed to connect from
    'localhost'. This ensures that someone cannot guess at
    the root password from the network...
    Disallow root login remotely? (Press y|Y for Yes, any other key for No) : N (选择N,允许root远程连接)
  5. 保留test数据库

    1
    2
    3
    By default, MySQL comes with a database named 'test' that
    anyone can access...
    Remove test database and access to it? (Press y|Y for Yes, any other key for No) : N (选择N,保留test数据库)
  6. 使修改权限立即生效

    1
    2
    3
    Reloading the privilege tables will ensure that all changes
    made so far will take effect immediately.
    Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y (选择Y,使修改权限立即生效)

7.3.检查Mysql服务状态

1
systemctl status mysql.service

7.4.配置远程访问

在Ubuntu下MySQL是只允许本地访问的,若需要远程访问,则需要进行配置;

  1. 找到 bind-address 修改值为 0.0.0.0

    1
    2
    #找到 bind-address 修改值为 0.0.0.0
    sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
  2. 重启Mysql

    1
    sudo /etc/init.d/mysql restart
  3. 登录Mysql

    1
    sudo mysql -u root -p
  4. 输入用户密码并查询

    1
    2
    3
    4
    5
    6
    7
    8
    #切换数据库 
    mysql>use mysql;

    #查询用户表命令
    mysql>select User,authentication_string,Host from user;

    #查看状态
    mysql>select host,user,plugin from user;
  5. 设置权限与密码

    1
    2
    3
    4
    5
    6
    7
    8
    #使用mysql_native_password修改加密规则
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';

    #更新一下用户的密码
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '密码' PASSWORD EXPIRE NEVER;

    #允许远程访问
    mysql> UPDATE user SET host = '%' WHERE user = 'root';
  6. 刷新cache中配置

    1
    2
    #刷新权限 
    mysql>flush privileges; mysql>quit;

7.5.Mysql8.x.x配置JDBC

  1. 找到系统对应版本的java JDBC:MySQL :: Download Connector/J

  2. 操作系统选择Platform IndependentUbuntu Linux,下载mysql-connector-java-8.x.x.tar.gzmysql-connector-java_8.x.x-1ubuntu20.04_all.deb文件。

  3. 把该驱动程序解压拷贝到spark的安装目录下

    1
    2
    #只需mysql-connector-java-8.x.x-bin.jar文件即可
    sudo tar -zxf ~/Downloads/mysql-connector-java-8.x.x.tar.gz -C /usr/local/spark/jars

7.6.使用pyspark连接mysql数据库

  1. 连接之前需要先添加信息,打开数据库向数据库添加表格和信息:

    1
    2
    3
    4
    5
    6
    mysql>create database spark ;
    mysql>use spark;
    mysql>create table student (id int(4), name char(20), gender char(4),age int(4));
    mysql>insert into student values(1,'Xueqian','F',23);
    mysql>insert into student values(2,'Weiliang','M',24);
    mysql>select * from student ;
  2. pyspark通过jdbc连接MySQL数据库

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #打开spark
    sudo cd /usr/local/spark/bin

    ./pyspark

    #注意是在spark中
    >>>jdbcDF=spark.read.format("jdbc").option("driver","com.mysql.jdbc.Driver").option("url","jdbc:mysql://localhost:3306/spark").option("dbtable","student").option("user","root").option("password","密码").load()

    >>>jdbcDF.show()
  3. 正确连接即可显示mysql刚刚新建的表格信息

7.7.Mysql命令

  1. 检查服务状态

    1
    2
    3
    systemctl status mysql.service
    #or
    sudo service mysql status
  2. mysql服务启动停止

    1
    2
    3
    4
    #启动 
    sudo service mysql start
    #停止
    sudo service mysql stop

3.其他详细命令可参照历史博文

7.8.Mysql登录报错解决方案

  1. mysql登录时报错

    1
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
  2. 解决方案

    1
    2
    3
    4
    5
    sudo vim /etc/mysql/my.cnf 

    #登录时跳过权限检查,添加在末尾
    [mysqld]
    skip-grant-tables
  3. 重启mysql服务

    1
    sudo systemctl restart mysqld
  4. 修改密码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #登录mysql,直接回车(Enter)
    mysql –u root –p

    #修改
    mysql>set password for ‘root’@‘localhost’=password(‘密码’);

    #如果报错
    ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

    #输入
    mysql>flush privileges;

    #再次输入
    mysql>set password for ‘root’@‘localhost’=password(‘密码’);

    #为避免麻烦,再次设置远程访问
    mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'Admin123@qwe' WITH GRANT OPTION;

    #输入
    mysql>flush privileges;

    #退出
    mysql>exit
  5. 取消跳过权限检查

    1
    2
    3
    4
    5
    sudo vim /etc/mysql/my.cnf 

    #注释或删除
    [mysqld]
    skip-grant-tables
  6. 重启mysql即可使用新密码连接

    1
    sudo systemctl restart mysqld

7.9.sqoop导入MySQL中文乱码解决方案

  1. 导致导入(可以插入中文,但不能用sqoop导入中文)时中文乱码的原因是character_set_server默认设置是latin1。

  2. 解决方案

    1
    2
    3
    4
    5
    6
    #编辑配置文件
    sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

    #在[mysqld]下添加一行
    character_set_server=utf8

  3. 重启mysql服务

    1
    service mysql restart
  4. 登陆mysql,查看mysql目前设置的编码为utf8即可解决。

    1
    2
    #注意在mysql中执行命令
    show variables like "char%";
  5. 关于utf8mb3 & uft8mb4


8.Mongodb配置

8.1.配置安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 安装依赖包
sudo apt-get install libcurl4 openssl
# 关闭和卸载原有的mongodb
service mongodb stop
sudo apt-get remove mongodb

# 导入包管理系统使用的公钥
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
# 如果命令执行结果没有显示OK,则执行此命令在把上一句重新执行:sudo apt-get install gnupg

# 注册mongodb源
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

# 更新源
sudo apt-get update

# 安装mongodb
sudo apt-get install -y mongodb-org=4.4.2 mongodb-org-server=4.4.2 mongodb-org-shell=4.4.2 mongodb-org-mongos=4.4.2 mongodb-org-tools=4.4.2
# 安装过程中如果提示: mongodb-org-tools : 依赖: mongodb-database-tools 但是它将不会被安装
# 终端下运行以下命令,解决:
# sudo apt-get autoremove mongodb-org-mongos mongodb-org-tools mongodb-org
# sudo apt-get install -y mongodb-org=4.4.2

# 创建数据存储目录
sudo mkdir -p /data/db

# 修改配置,开放27017端口
sudo vim /etc/mongod.conf
# 把12行附近的port=27017左边的#号去掉

8.2.启动和关闭MongoDB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 重新加载配置,并启动mongodb
sudo systemctl daemon-reload
sudo systemctl start mongod

# 查看运行状态
sudo systemctl status mongod
# 如果mongodb状态为stop,则运行 sudo systemctl enable mongod

# 停止mongodb
sudo systemctl stop mongod

# 重启mongodb
sudo systemctl restart mongod

# 进入交互终端
mongo

8.3.尾巴


9.Hive配置

9.1.下载Hive-3.1.2

apache-hive-3.1.2-bin.tar.gz

9.2.解压安装

1
2
3
4
5
6
7
8
#解压安装包apache-hive-3.1.2-bin.tar.gz至路径 /usr/local
sudo tar -zxf ~/下载/apache-hive-3.1.2-bin.tar.gz -C /usr/local

#将解压后的文件重命名为hbase
sudo mv ./apache-hive-3.1.2-bin.tar.gz ./hive

#设置用户权限,-R后的参数表示计算机用户名
sudo chown -R 用户名 ./hive

9.3.配置环境变量

1
2
3
4
5
6
7
8
sudo vim ~/.profile

#添加下面两行到文件并保存
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin

#保存文件并生效
source ~/.profile

9.4.创建编辑hive-site.xml

在/usr/local/hive/conf目录下,创建hive-site.xml。

1
2
3
4
5
#创建文件
touch hive-site.xml

#修改编辑
sudo vim hive-site.xml

9.5.添加以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<configuration>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<description>
Enforce metastore schema version consistency.
True: Verify that version information stored in metastore matches with one from Hive jars. Also disable automatic
schema migration attempt. Users are required to manully migrate schema after Hive upgrade which ensures
proper metastore schema migration. (Default)
False: Warn if the version information stored in metastore doesn't match with one from in Hive jars.
</description>
</property>

<!-- 存储在hdfs上的数据路径 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/usr/local/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>/usr/local/hadoop-3.2.2/tmp/hdfs/hive</value>
<description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/&lt;username&gt; is created, with ${hive.scratch.dir.permission}.</description>
</property>

<!-- 本地mysql -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/myhive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
<!-- 如果 mysql 和 hive 在同一个服务器节点,那么请更改 hadoop02 为 localhost -->
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.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>数据库密码</value>
<description>password to use against metastore database</description>
</property>

</configuration>

9.6.创建两个对应的目录并赋予读写权限

1
2
3
4
sudo -mkdir -p /usr/local/hive/warehouse
sudo -mkdir -p /usr/local/hadoop-3.2.2/tmp/hdfs/hive
sudo -chmod -R 777 /usr/local/hive/warehouse
sudo -chmod -R 777 /usr/local/hadoop-3.2.2/tmp/hdfs/hive

9.7.注意不同版本的数据库对应不同数据库的驱动类名称

  • 新版本8.0版本的驱动为com.mysql.cj.jdbc.Driver
  • 旧版本5.x版本的驱动为com.mysql.jdbc.Driver

9.8.配置hive-env.sh文件

1
2
3
4
5
6
7
#在/usr/local/hive/conf下执行该命令
sudo cp hive-env.sh.template hive-env.sh

#添加下面三行到文件并保存
export HADOOP_HOME=/usr/local/hadoop-3.2.2
export HIVE_CONF_DIR=/usr/local/hive/conf
export HIVE_AUX_JARS_PATH=/usr/local/hive/lib

9.9.将JDBC的jar包拷贝在/usr/local/hive/lib目录下

  • mysql-connector-java_8.0.20-1ubuntu20.04_all.deb
    1
    2
    3
    #解压文件,将文件中的mysql-connector-java-8.0.20.jar复制到/usr/local/hive/lib中
    sudo tar zxvf mysql-connector-java_8.0.20-1ubuntu20.04_all.deb
    sudo mv mysql-connector-java-8.0.20.jar /usr/local/hive/lib

9.10.在/usr/local/hive/bin目录下执行以下命令

1
2
3
schematool -dbType mysql -initSchema
schematool -dbType mysql -info
hive

9.11.注意

启动hive时需先启动hadoop集群、zookeeper和mysql,关闭则倒序执行。

9.12.报错原因

9.12.1.报错原因1

  1. Jar包冲突
    因为跟hadoop的jar包存在冲突,主要有两个jar包冲突,一个log4j-slf4j-impl-2.10.0.jar跟hadoop冲突,可以删除。

    1
    sudo mv $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.bak
  2. 另一个是guava-19.0.jar,跟hadoop里面的guava-27.0-jre.jar冲突,故采用高版本替换低版本的方式。

    1
    2
    3
    sudo cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib

    sudo rm $HIVE_HOME/lib/guava-19.0.jar

9.12.2.报错原因2

hive-site.xml配置文件中,3278行(见报错记录第二行)有特殊字符。

1
2
Exception in thread "main" java.lang.RuntimeException: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x8  
at [row,col,system-id]: [3278,96,"file:/export/servers/apache-hive-3.1.2-bin/conf/hive-site.xml"]

进入hive-site.xml文件,跳转到对应行,删除里面的&#8特殊字符即可。

9.13.尾巴


10.Sqoop配置

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

10.1.下载sqoop1.4.7

Index of /dist/sqoop/1.4.7

10.2.解压安装

1
2
3
4
5
6
7
8
#解压安装包hbase-2.2.2-bin.tar.gz至路径 /usr/local
sudo tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /usr/local

#将解压后的文件重命名为sqoop
sudo mv ./sqoop-1.4.7.bin__hadoop-2.6.0 ./sqoop

#设置用户权限,-R后的参数表示计算机用户名
sudo chown -R 用户名 ./sqoop

10.3.配置环境变量

1
2
3
4
5
6
7
8
9
10
11
12
sudo vim ~/.profile

#添加下面三行到文件并保存
export SQOOP_HOME=/usr/local/sqoop
export PATH=$PATH:$SQOOP_HOME/bin
export CLASSPATH=$CLASSPATH:$SQOOP_HOME/lib

#保存文件并生效
source ~/.profile

#查看HBase版本,确定hbase安装成功
/usr/local/hbase/bin/hbase version

10.4.修改配置文件sqoop-env.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd /sqoop/conf/

#将sqoop-env-template.sh复制一份并命名为sqoop-env.sh
sudo cat sqoop-env-template.sh >> sqoop-env.sh

#编辑sqoop-env.sh
sudo vim sqoop-env.sh

#添加下面六行到文件并保存
export HADOOP_COMMON_HOME=/usr/local/hadoop-3.2.2
export HADOOP_MAPRED_HOME=/usr/local/hadoop-3.2.2
export HBASE_HOME=/usr/local/hbase
export HIVE_HOME=/usr/local/hive
export ZOOKEEPER_HOME=/usr/local/zookeeper
export ZOOCFGDIR=/usr/local/zookeeper/conf

10.5.验证Sqoop安装

1
./bin/sqoop version

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

  • MySQL :: Download Connector/J
    1
    2
    3
    4
    sudo tar -zxvf mysql-connector-java_8.0.28-1ubuntu20.04_all.deb

    #将mysql-connector-java_8.0.28-bin.jar拷贝到/usr/local/sqoop/lib
    sudo cp mysql-connector-java_8.0.28-bin.jar /usr/local/sqoop/lib

10.7.测试与MySQL的连接

1
2
3
4
5
6
7
8
#首先请确保hadoop和mysql服务已经启动
#mysql启动命令,hadoop需切换至hadoop/sbin下执行启动命令
service mysql start

#测试sqoop与MySQL之间的连接是否成功
sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username root -P

#mysql的数据库列表显示在屏幕上表示连接成功

10.8.报错解决

错误: 找不到或无法加载主类 org.apache.sqoop.Sqoop

解决方法:

  1. sqoop-1.4.x.tar.gz在1.4.5以上的安装包已经没有了这个jar包,解压sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

  2. 取出sqoop-1.4.7.jar放在/hadoop/share/hadoop/mapreduce/lib下,并且也放到/usr/local/sqoop/lib下。

  3. 然后重新导入数据

  4. 如果还解决不了,就在/usr/local/sqoop/bin里找到sqoop脚本,vim sqoop,修改最下面的配置。

1
2
3
4
5

#exec ${HADOOP_COMMON_HOME}/bin/hadoop org.apache.sqoop.Sqoop "$@"exec

改为
${HADOOP_COMMON_HOME}/bin/hadoop jar /usr/local/sqoop/lib/sqoop-1.4.7.jar org.apache.sqoop.Sqoop "$@"

11.尾巴