云计算于大数据入门 —— 环境安装
本教程采用厦门大学数据库实验室的林子雨老师的同等开发环境:
所需软件及环境
所有文件整合的安装包我会放在文末
本案例所涉及的系统及软件
- Linux系统(Ubuntu16.04或14.04或18.04),这里使用 Ubuntu 20.04.5 LTS 系统进行安装
- MySQL(版本无要求),这里使用清华大学镜像源中的默认版本
- Hadoop(2.7.1或2.7.3,不能用3.0及以上版本,因为Sqoop工具无法支持Hadoop3.0以上版本) 由于教程较老,这里安装 2.10.2 版本
- HBase(1.1.2或1.1.5,HBase版本需要和Hadoop版本兼容)这里是用 2.5.3 版本
- Hive(1.2.1,Hive需要和Hadoop版本兼容,不要安装Hive3.0以上版本)这里使用 2.3.9 版本
- Sqoop(必须用1.4.6,注意,Sqoop无法支持Hadoop3.0以上和2.6以下版本)这里使用 Sqoop1 的 1.4.7 版本
- R(版本无要求)这里我们在后续使用的时候再安装
- Eclipse(版本无要求)
这里在安装的过程中默认我们已经安装了如下的一些初始环境:
sudo apt-get install buile-essential vim
镜像源切换
这里推荐使用最快速的镜像源,清华大学镜像源:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
Hardoop 安装
安装并配置 SSH
首先安装 SSH :
sudo apt-get install openssh-server
安装成功后使用如下命令登录本机:
ssh localhost
登录成功界面如下:
这里有些在进行 ssh 连接 localhost 的时候会出现如下错误:
ssh: connect to host localhost port 22: Connection refused
首先确定 openssh-server 是否安装:
sudo apt list --installed | grep openssh-server
显示如下说明已经安装:
查看 ssh 运行状态:
sudo service ssh status
# root
这里说明我们没有打开:
使用以下命令启动 sshd
sudo service ssh start
然后我们再次执行连接命令,出现如下报错:
ppqppl@localhost: Permission denied (publickey).
解决方法网上一搜一大把,基本是有两种方法,第一种只会影响到本用户所处的环境,第二种会影响到整个根目录(因为要修改 /etc 目录下的文件)
百度上搜到的答案同质化比较严重(基本是 sshkey ),谷歌上搜到的答案存在越扯越远脱离原问题的不足,也可能是因为大佬不屑于用简单的方法解决问题
这里直接给出最简单的解决 sshkey 方法:
操作步骤
首先会遇到很多教程没说明的两个坑(如果没有请无视该条)
家目录~下没有.ssh隐藏文件夹
使用 ssh localhost 命令登录一下本机,就能自动创建出.ssh文件夹
.ssh文件夹里没有authorized_keys文件
直接touch authorized_keys创建即可
(注意每台master和slave机器都要保证有.ssh和authorized_keys)
在master机器上,执行下行命令来生成密钥:
ssh-keygen -t rsa
此时会弹出几次提示语句:
第一次是自定义保存密钥的文件名,什么都不填继续回车就代表默认生成文件名为 id_rsa
第二次是自定义一个密码,该密码用在哪里本例不需要,所以直接回车,默认无密码就行
第三次是再确认一次刚刚设置的密码,继续直接回车
执行完毕后会在 ~/.ssh 目录下生成 id_rsa 和 id_rsa.pub 文件
执行下面命令将该密钥文件导入本机的已认证密码集中,并赋予权限以让密钥可用:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
将上一步生成的 id_rsa.pub 文件拷贝到其他 slave 机器上:
scp ~/.ssh/id_rsa.pub ppqppl@localhost:/home/ppqppl/.ssh
登录到每一台 slave 机器,执行与第 2 步中类似的命令
我们可以看到,我们已经解决了这个问题:
安装 JAVA 环境
下面给出三种安装 JDK 的方式,这里推荐使用第一种:
- 手动安装 JDK
这里我们需要从官网下载 JDK1.8 对应的 linux 系统的安装包,然后执行如下命令:
cd /usr/lib
sudo mksir jvm
cd ~
cd downloads
sudo tar -zxvf jdk安装包 -C /usr/lib/jvm
解压好之后如下:
然后我们在环境文件下添加如下命令:
sudo gedit ~/.bashrc # 打开环境配置文件
# 在末尾添加如下:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
如果在打开 ssh 后报错如下:
Unable to init server: 无法连接: 拒绝连接
(gedit:38615): Gtk-WARNING **: 10:10:50.917: cannot open display:
执行如下命令即可:
xhost local:gedit
如果出现如下:
non-network local connections being added to access control list
则解决问题
如果继续报错:
xhost: unable to open display “”
使用如下命令:
export DISPLAY=:0
然后再次执行上述命令解决问题
最后执行如下命令配置好 JAVA 环境:
source ~/.bashrc
我们可以使用 java -version 命令查看是否配置成功,出现如下就说明配置成功:
- 第二种安装方式
直接使用命令进行安装:
sudo apt-get install openjdk-7-jre openjdk-7-jdk
然后使用如下命令进行环境配置:
dpkg -L openjdk-7-jdk | grep '/bin/javac'
vim ~/.bashrc # 打开环境添加如下字段
export JAVA_HOME=JDK安装路径
# 最后引用环境变量
source ~/.bashrc
- 第三种安装方式
执行命令安装:
sudo apt-get install default-jre default-jdk
添加环境配置:
vim ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/default-java
source ~/.bashrc
安装 Hadoop2
Hadoop 官网:Hadoop 2
这里我们首先需要在 Hadoop 镜像源中下载好对应的版本,然后安装到 /usr/local 路径中:
sudo tar -zxf hadoop-2.10.2.tar.gz -C /usr/local
cd /usr/local
sudo mv ./hadoop-2.10.2/ ./hadoop
sudo chown -R 用户名 ./hadoop
Hadoop 解压后即可使用。输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
cd /usr/local/hadoop
./bin/hadoop version
显示如下说明已经成功安装:
Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行,非分布式即单 Java 进程,方便进行调试
MySQL 安装
这里直接执行命令安装即可:
sudo apt-get install mysql-server #安装mysql
启动和关闭 mysql 服务器:
service mysql start
service mysql stop
确认是否启动成功,mysql 节点处于 LISTEN 状态表示启动成功:
sudo netstat -tap | grep mysql
如果这里出现如下提示:
sudo: netstat:找不到命令
我们直接安装就可以解决:
sudo apt-get install net-tools
进入 MySQL 的 shell 界面:
mysql -u root -p
如果在打开 MySQL shell 界面时报错如下:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
一般出现这种情况多数是安装新版本 mysql,root 密码是随机的,也不是空密码,所以要通过查看随机密码进入,再进行修改原来的密码
这里我们用其他用户登录 MySQL,然后查看 user 表,修改密码格式即可:
# 查看 MySQL 自动创建的用户信息
sudo cat /etc/mysql/debian.cnf
# 用该用户进行登录
mysql -u 用户名 -p
输入密码
# 使用如下命令
use mysql;
select user,plugin from user;
# 执行如下命令
update user set plugin='mysql_native_password' where user='root'; # 修改其密码格式
select user,plugin from user; # 查询其用户
# 执行后刷新权限(可以理解为高并发,可能还没处理完数据让他缓存,就执行下一步操作可能会出错)
flush privileges;
# 增加 root 密码
alter user 'root'@'localhost' identified by 'ppqppl';
# 再次刷新权限
flush privileges;
# 退出并重启 MySQL 问题即可解决
exit
service mysql restart
流程如下:
下面需要解决利用 sqoop 导入 MySQL 中文乱码的问题(可以插入中文,但不能用 sqoop 导入中文)
导致导入时中文乱码的原因是character_set_server默认设置是latin1,如下图:
注意:这里如果要是显示如下,都是 utf8 就不需要执行此操作:
可以单个设置修改编码方式 set character_set_server=utf8; 但是重启会失效,建议按以下方式修改编码方式:
编辑配置文件:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
在[mysqld]下添加一行 character_set_server=utf8 。如下图
重启MySQL服务,登陆 MySQL,并查看 MySQL 目前设置的编码:
HBase 安装
HBase 官网:HBase
首先在官网下载 HBase 2 的最新版,然后进行安装:
sudo tar -zxf ./hbase-2.5.3-bin.tar.gz -C /usr/local
sudo mv /usr/local/hbase-2.5.3 /usr/local/hbase
# 修改环境变量
gedit ~/.bashrc
# 添加图下命令
export PATH=$PATH:/usr/local/hbase/bin
# 执行生效
source ~/.bashrc
# 添加 HBase 权限
cd /usr/local
# 将 hbase 下的所有文件的所有者改为ppqppl,ppqppl是当前用户的用户名
sudo chown -R ppqppl ./hbase
# 查看版本
/usr/local/hbase/bin/hbase version
出现如下,就说明安装成功:
Hive 安装
首先官网下载 Hive:Hive
然后执行如下命令进行安装:
sudo tar -zxvf ./apache-hive-1.2.1-bin.tar.gz -C /usr/local
cd /usr/local/
sudo mv apache-hive-1.2.1-bin hive
# 修改文件权限
sudo chown -R ppqppl hive
# 修改环境变量
gedit ~/.bashrc
# 添加如下内容
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
export HADOOP_HOME=/usr/local/hadoop
# 执行生效
source ~/.bashrc
# 修改 /usr/local/hive/conf 下的 hive-site.xml
cd /usr/local/hive/conf
mv hive-default.xml.template hive-default.xml
# 使用 vim 编辑器新建一个配置文件 hive-site.xml
cd /usr/local/hive/conf
vim hive-site.xml
在 hive-site.xml 中添加如下配置信息:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</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>ppqppl</value>
<description>password to use against metastore database</description>
</property>
</configuration>
配置 MySQL
首先官网下载 MySQL 的 jdbc 驱动:MySQL jdbc下载
然后运行如下命令安装:
tar -zxvf mysql-connector-java-5.1.49.tar.gz
#将mysql-connector-java-5.1.40-bin.jar拷贝到/usr/local/hive/lib目录下
cp mysql-connector-java-5.1.49/mysql-connector-java-5.1.49-bin.jar /usr/local/hive/lib
启动并登陆 mysql shell:
#启动mysql服务
service mysql start
#登陆shell界面
mysql -u root -p
新建hive数据库
create database hive;
配置 mysql 允许 hive 接入:
# 将所有数据库的所有表的所有权限赋给 hive 用户,后面的 hive 是配置 hive-site.xml 中配置的连接密码
grant all on *.* to hive@localhost identified by 'hive';
# 刷新 mysql 系统权限关系表
flush privileges;
启动 Hive
启动 hive 之前,请先启动 hadoop 集群
首先我们需要在环境配置中添加如下配置:
sudo gedit ~/.bashrc
# 添加如下内容
export PATH=$PATH:$HADOOP_HOME/sbin
export PATH=$PATH:$HIVE_HOME/bin
start-all.sh
hive
注意:我们这里已经配置了 PATH,所以,不要把 start-all.sh 和 hive 命令的路径加上。如果没有配置 PATH,请加上路径才能运行命令,比如,本教程 Hadoop 安装目录是“ /usr/local/hadoop ”,Hive 的安装目录是“ /usr/local/hive ”,因此,启动 hadoop 和 hive ,也可以使用下面带路径的方式:
cd /usr/local/hadoop
./sbin/start-all.sh
cd /usr/local/hive
./bin/hive
在启动 hadoop 时报错如下:
sudo gedit /usr/local/hadoop/etc/hadoop/hadoop-env.sh
这里需要修改 hadoop-env.sh
sudo gedit /usr/local/hadoop/etc/hadoop/hadoop-env.sh
# 将原本的 JAVA_HOME 替换为绝对路径就可以
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_121
如果启动 hadoop 再次出现如下报错:
resourcemanager running as process 3027. Stop it first.
localhost: nodemanager running as process 4265. Stop it first.
这里我们先运行如下命令,停止所有服务即可:
stop-all.sh
我们再次执行打开 hadoop 命令就不会报错
成功启动 hadoop 画面如下:
在启动 Hive 时,有可能会出现 Hive metastore database is not initialized 的错误,这里给出解决方案:
# 在终端执行如下命令
schematool -dbType mysql -initSchema
再次启动 Hive 即可,打开后显示如下:
Hive 里面的使用方法和 SQL 相同,只不过这里执行退出命令要先关闭 JVM ,执行时间较长
Sqoop 安装
首先官网下载 Sqoop:Sqoop
Sqoop 1 的最新版本到 1.4.7,Sqoop 2 的最新版本到 1.99.7,这里考虑兼容性选择安装 1.4.7 版本
然后执行如下命令进行安装:
#进入当前用户的用户目录
cd ~
#sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz文件下载后就被保存在该目录下面
cd 下载
#解压安装文件
sudo tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /usr/local
cd /usr/local
#修改文件名
sudo mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop
#修改文件夹属主,如果你当前登录用户名不是hadoop,请修改成你自己的用户名
sudo chown -R ppqppl sqoop
修改配置文件 sqoop-env.sh:
cd sqoop/conf/
#将sqoop-env-template.sh复制一份并命名为sqoop-env.sh
cat sqoop-env-template.sh >> sqoop-env.sh
#编辑sqoop-env.sh
gedit sqoop-env.sh
修改 sqoop-env.sh 的如下信息,这里直接添加在后面也可以
export HADOOP_COMMON_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=/usr/local/hadoop
export HBASE_HOME=/usr/local/hbase
export HIVE_HOME=/usr/local/hive
#export ZOOCFGDIR= #如果读者配置了ZooKeeper,也需要在此配置ZooKeeper的路径
打开当前用户的环境变量配置文件:
gedit ~/.bashrc
# 添加如下:
export SQOOP_HOME=/usr/local/sqoop
export PATH=$PATH:$SBT_HOME/bin:$SQOOP_HOME/bin
export CLASSPATH=$CLASSPATH:$SQOOP_HOME/lib
# 执行下面命令让配置文件立即生效
source ~/.bashrc
将 mysql 驱动包拷贝到 SQOOP_HOME/lib:
#切换到下载路径,如果你下载的文件不在这个目录下,请切换到下载文件所保存的目录
cd ~/下载
#解压mysql驱动包
sudo tar -zxvf mysql-connector-java-5.1.49.tar.gz
#这时就可以看到解压缩后得到的目录 mysql-connector-java-5.1.49
ls
cp ./mysql-connector-java-5.1.49/mysql-connector-java-5.1.49-bin.jar /usr/local/sqoop/lib
测试与 MySQL 的连接
# 首先确保启动 MySQL
service mysql start
# 然后就可以测试 sqoop 与 MySQL 之间的连接是否成功
sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username root -P
显示画面如下说明连接成功: