1 环境安装
1.1 环境说明
Window系统8G内存+virtualbox+ Ubuntu16 server版 虚拟机 * 3
虚拟机安装教程可借鉴:(注意更改用户名和主机名)
https://blog.csdn.net/weixin_43793181/article/details/116269816
(用户名建议改hadoop,主机名改master,slave1,slave2。因为下面教程都是按照这几个用户名和主机名进行配置的,会比较方便)
软件版本说明:
Ubuntu16.04 server * 3
JDK8:jdk-8u331-linux-x64.tar.gz
Scala:scala-2.12.16.tgz
Hadoop:hadoop-3.3.3.tar.gz
Zookeepe:apache-zookeeper-3.7.1-bin.tar.gz
Hbase:hbase-2.4.12-bin.tar.gz
Spark:spark-3.3.0-bin-hadoop3.tgz
连接虚拟机服务器工具:
Xshell-7.0.0087p.exe --传输命令
Xftp-7.0.0085p.exe --文件传输
为什么要连接工具:server版无法复制粘贴命令行也无法直接拖拽文件进入,使用连接工具方便很多。
文件百度网盘地址:
https://pan.baidu.com/s/1FY6h9DANQ2u_syyXyyWHgQ
提取码:ybum
2 主机配置
1 设置桥接模式
注意:三台虚拟机都要配置!!!
装完虚拟机之后,先关机,关机命令
poweroff --关机
reboot --重启
按如下步骤进行设置:
设置完开机。
2 Xshell连接
下载安装包直接安装Xshell和Xftp,然后打开Xshell。
用以下命令可查看虚拟机ip地址:
ip addr
三台虚拟机获取三个会话:
3 更改主机名
vi使用基本命令
进入vi后是命令行模式:
按以下进入插入模式:
按Esc键返回命令行模式
如果装主机的时候没配置就现在配置
三台虚拟机都要执行:
sudo vi /etc/hostname
把原来的删除,分别改成master,slave1,slave2.
我这里用户名是hadoop,如果一开始安装的时候设置其他的想修改可参考以下教程:
https://blog.csdn.net/m0_67401606/article/details/123651879
注意:更改用户名的操作不要在Xshell中执行,直接在虚拟机命令行执行!
4 配置hosts文件
三台主机分别执行:
sudo vi /etc/hosts
把原来里面的localhost删除
加入以下内容:(注意三台都加)
3 设置免密登录
以下命令行查看当前路径:
pwd
三台执行顺序按照:master,slave1,slave2避免出错
1.在/home/hadoop目录下执行:(三台都要执行)
mkdir .ssh --创建免密管理文件夹
cd .ssh --进入该文件夹
2.在/home/hadoop/.ssh 目录下执行:(三台都要执行)
ssh-keygen -t rsa --生成密钥
让你输入一些东西,不用管连续一直回车,应该是三次。
3.在/home/hadoop/.ssh 目录下执行:
--设置免密登录
ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub slave1
注意这条指令每台主机都要执行三次,分别master,slave1,slave2,注意:自己到自己也要设置!!
4.验证
每台主机都验证一遍到其他三台主机的免密登录,(包括自己)。
ssh master --其他主机就修改主机名
不需要密码即成功。
4 JDK8安装
1 环境准备
在/home/hadoop创建install文件夹用来保存安装的软件,
创建package文件夹用来保存安装包。
创建文件夹命令
mkdir install
mkdir package
打开文件传输助手Xftp,传入JDK安装包(打开虚拟机目录直接拖拽即可。)
2 安装
回到Xshell,在master中,打开安装包所在目录。
执行以下命令:
sudo tar -zxvf jdk-8u331-linux-x64.tar.gz -C ~/install
3 配置环境变量
sudo vi /etc/profile
输入以下内容:
(如果按照上面来说路径应该一样,路径不一样的话请注意修改)
export JAVA_HOME=/home/hadoop/install/jdk1.8.0_331
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
4 使环境配置生效
source /etc/profile
5 查看配置
java -version
6 将文件夹scp到到其它节点服务器上
master节点执行就行.
scp -r ~/install/jdk1.8.0_331 hadoop@slave1:~/install/jdk1.8.0_331
scp -r ~/install/jdk1.8.0_331 hadoop@slave2:~/install/jdk1.8.0_331
其他节点的环境变量配置:
我是自己复制粘贴的,因为我以下指令执行权限不足,我也懒得修改就直接复制粘贴了。
sudo scp /etc/profile hadoop@slave1:/etc
sudo scp /etc/profile hadoop@slave2:/etc
分别使环境变量生效:(两台slave)
source /etc/profile
5 Scala安装
1 安装
拖入安装包,打开安装包所在目录:
sudo tar -zxvf scala-2.12.16.tgz -C ~/install
2 配置环境变量
sudo vi /etc/profile
添加以下内容并保存:
export SCALA_HOME=/home/hadoop/install/scala-2.12.16
export PATH=$PATH:$SCALA_HOME/bin
3 使环境配置生效
source /etc/profile
4 查看是否配置成功
scala -version
5 将文件夹scp到其它节点
scp -r ~/install/scala-2.12.16hadoop@slave1:~/install/scala-2.12.16
scp -r ~/install/scala-2.12.16hadoop@slave2:~/install/scala-2.12.16
6 其他节点配置和环境变量
复制粘贴就行,下面指令我一直用不了,想用自己CSDN解决。
sudo scp /etc/profile hadoop@slave1:/etc
sudo scp /etc/profile hadoop@slave2:/etc
6 Hadoop安装
1 安装
拖入安装包,打开安装包所在目录:
tar -zxvf hadoop-3.3.3.tar.gz -C ~/install
2 修改配置文件
如果路径不同记得查看修改,相同直接复制粘贴就行
进入hadoop安装目录的/etc/hadoop目录下
core-site.xml
vi core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop/tmp</value>
</property>
</configuration>
hdfs-site.xml
vi hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/install/hadoop-3.3.3/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/install/hadoop-3.3.3/tmp/dfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
mapred-site.xml
vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/home/hadoop/install/hadoop-3.3.3</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/home/hadoop/install/hadoop-3.3.3</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/home/hadoop/install/hadoop-3.3.3</value>
</property>
</configuration>
这个需要复制一份备份:
touch mapred-site.xml.template
cp mapred-site.xml mapred-site.xml.template
yarn-site.xml
vi yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
hadoop-env.sh
vi hadoop-env.sh
添加以下内容:
export JAVA_HOME=/home/hadoop/install/jdk1.8.0_331
workers
vi workers
加入以下内容
master
slave1
slave2
3 配置环境变量
sudo vi /etc/profile
添加以下内容并保存:
export HADOOP_HOME=/home/hadoop/install/hadoop-3.3.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
4 使环境配置生效
source /etc/profile
5 将文件夹scp到其它节点
scp -r ~/install/hadoop-3.3.3 hadoop@slave1:~/install/hadoop-3.3.3
scp -r ~/install/hadoop-3.3.3 hadoop@slave2:~/install/hadoop-3.3.3
6 其他节点配置和环境变量
两台slave直接执行一遍步骤(3).
使环境变量生效
source /etc/profile
7 格式化namenode节点
回到master主机
hadoop namenode -format
注意:只需要格式化一遍,如果启动hadoop验证有问题需要重新格式化,需要删除三个节点安装目录下的tmp和logs文件夹!
8 启动hadoop
start-all.sh --启动集群
stop-all.sh --关闭集群
得到以下结果正确:
三台主机分别执行
jps
master:
slave1和slave2:
9 错误原因
如果少了某个节点,自行百度原因.
一般是免密登录的问题,关闭集群之后,分别检查三个节点的免密登录是否还有效。
ssh [master|slave1|slave2] --都不用密码的话我也不懂了,百度就行。
7 Zookeeper安装
1 安装
拖入安装包,打开安装包所在目录:
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz -C ~/install
(我嫌文件夹太长,我把安装的文件夹改成了zookeeper-3.7.1)
修改文件夹名字指令:
mv apache-zookeeper-3.7.1 zookeeper-3.7.1
2 创建用于存储数据和日志的文件夹
cd /home/hadoop/install/zookeeper-3.7.1
mkdir data
mkdir logs
3 创建配置文件
cd /home/hadoop/install/zookeeper-3.7.1/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
修改配置文件,改为以下内容:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/install/zookeeper-3.7.1/data
dataLogDir=/home/hadoop/install/zookeeper-3.7.1/logs
clientPort=2181
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
server.4=slave3:2888:3888
server.5=slave4:2888:3888
4 修改myid文件
注意:id和host与zoo.cfg中配置的相匹配
cd /home/hadoop/install/zookeeper-3.7.1/data
echo '1' > myid
5 将文件夹scp到其它节点
scp -r ~/install/zookeeper-3.7.1 hadoop@slave1:~/install/zookeeper-3.7.1
scp -r ~/install/zookeeper-3.7.1 hadoop@slave2:~/install/zookeeper-3.7.1
其他节点修改myid文件
cd /home/hadoop/install/zookeeper-3.7.1/data
vi myid
slave1修改为2
slave2修改为3
6 环境变量配置
三台机器都要执行:
sudo vi /etc/profile
加入:
export ZOOKERPER_HOME=/home/hadoop/install/zookeeper-3.7.1
export PATH=$PATH:$ZOOKERPER_HOME/bin
环境变量生效:
source /etc/profile
7 启动zookeeper
注意:所有节点都需要启动!!
zkServer.sh start
三台机器输入:
jps
得到以下结果就是正确的:(三台机器都有QuorumPeerMain进程)
master:
slave:
8 Hbase安装
1 安装
拖入安装包,打开安装包所在目录:
tar -zxvf hbase-2.4.12-bin.tar.gz -C ~/install
2 修改配置文件
cd /home/hadoop/install/hbase-2.4.12/conf
hbase-env.sh
vi hbase-env.sh
加入:
export JAVA_HOME=/home/hadoop/install/jdk1.8.0_331
export HBASE_MANAGES_ZK=false
export HBASE_CLASSPATH=/home/hadoop/install/hbase-2.4.12/conf
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true" --hadoop与hbase有jar包冲突,以hadoop为主
注释掉以下行:(如果有的话)
#export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
#export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
hbase-site.xml
vi hbase-site.xml
加入:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>master:6000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/install/zookeeper-3.7.1/data</value>
</property>
</configuration>
regionservers
vi regionservers
加入:
master
slave1
slave2
3 hadoop上创建文件目录
hadoop fs -mkdir /hbase
4 配置环境变量
三台机器都要执行:
sudo vi /etc/profile
加入:
export HBASE_HOME=/home/hadoop/install/hbase-2.4.12
export PATH=$PATH:$HBASE_HOME/bin
环境变量生效:
source /etc/profile
5 将文件夹scp到其它节点
scp -r ~/install/hbase-2.4.12 hadoop@slave1:~/install/hbase-2.4.12
scp -r ~/install/hbase-2.4.12 hadoop@slave2:~/install/hbase-2.4.12
6 启动进程
只需要master节点启动就行(除了zookeeper三节点启动,其他都是master节点启动)
start-hbase.sh --启动
stop-hbase.sh --关闭
使用查看指令:
jps
得到以下结果即正确:
master:
slave:
9 Spark安装
1 安装
拖入安装包,打开安装包所在目录:
tar -xzvf spark-3.3.0-bin-hadoop3.tgz -C ~/install
2 修改配置文件
进入到spark的配置目录下
cd /home/hadoop/install/spark-3.3.0-bin-hadoop3/conf
修改slaves.template、spark-env.sh.template、spark-defaults.conf.template等文件的文件名
mv slaves.template slaves
mv spark-env.sh.template spark-env.sh
mv spark-defaults.conf.template spark-defaults.conf
spark-env.sh
vi spark-env.sh
添加内容保存:
export JAVA_HOME=/home/hadoop/install/jdk1.8.0_331
export SCALA_HOME=/home/hadoop/install/scala-2.12.16
export HADOOP_HOME=/home/hadoop/install/hadoop-3.3.3
export HADOOP_CONF_DIR=/home/hadoop/install/hadoop-3.3.3/etc/hadoop
SPARK_MASTER_IP=master
SPARK_WORKER_MEMORY=1024m
workers
vi workers
加入:
master
slave1
slave2
spark-defaults.conf
vi spark-defaults.conf
加入:
spark.master spark://master:7077
3 配置环境变量
三台都配置!!
sudo vi /etc/profile
加入:
#spark
export SPARK_HOME=/home/hadoop/install/spark-3.3.0-bin-hadoop3
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
使环境配置生效
source /etc/profile
4 将文件夹scp到其它节点
scp -r ~/install/spark-3.3.0-bin-hadoop3 hadoop@slave1:~/install/spark-3.3.0-bin-hadoop3
scp -r ~/install/spark-3.3.0-bin-hadoop3 hadoop@slave2:~/install/spark-3.3.0-bin-hadoop3
5 启动
由于hadoop和spark启动指令一样,spark启动需要进入目录文件下
cd /home/hadoop/install/spark-3.3.0-bin-hadoop3/sbin
./start-all.sh --启动
./stop-all.sh --关闭
6 验证
master
slave:
10 HBase命令行实现增删查改
1 进入客户端命令行
hbase shell
使用指令查看所有的指令
help
2 创建命名空间
create_namespace 'hadoop'
3 对表格增删改查
创建表格
create 'hadoop:student','info','msg'
/*
命名空间:表名
列族1
列族2
*/
--创建表格不需要添加列名,只要创建列族就行。
查看表格信息
desc 'hadoop:student'
修改表格
'hadoop:student',NAME=>'msg',VERSIONS=>3 --修改列族信息
alter 'hadoop:student','delete'=>'msg' --删除列族
删除表格
disable 'hadoop:student' --现设置不可用,防止误删
drop 'hadoop:student'
4 对表的内容增删改查
写入数据
命令格式:
hbase> put 'ns1:t1', 'r1', 'c1', 'value'
hbase> put 't1', 'r1', 'c1', 'value'
hbase> put 't1', 'r1', 'c1', 'value', ts1
hbase> put 't1', 'r1', 'c1', 'value', {ATTRIBUTES=>{'mykey'=>'myvalue'}}
hbase> put 't1', 'r1', 'c1', 'value', ts1, {ATTRIBUTES=>{'mykey'=>'myvalue'}}
hbase> put 't1', 'r1', 'c1', 'value', ts1, {VISIBILITY=>'PRIVATE|SECRET'}
内容:列名是动态加的,不用新建,直接用
put 命名空间:表 + 行号 + 列族:列名 + 内容
put 'hadoop:student','1000','info:name','super_cool'
put 'hadoop:student','1000','info:age','21'
put
'hadoop:student','1001','info:name','super_cool1'
put 'hadoop:student','1002','info:name','super_cool2'
读取数据
get 格式
hbase> t.get 'r1'
hbase> t.get 'r1', {TIMERANGE => [ts1, ts2]}
hbase> t.get 'r1', {COLUMN => 'c1'}
hbase> t.get 'r1', {COLUMN => ['c1', 'c2', 'c3']}
hbase> t.get 'r1', {COLUMN => 'c1', TIMESTAMP => ts1}
hbase> t.get 'r1', {COLUMN => 'c1', TIMERANGE => [ts1, ts2], VERSIONS => 4}
hbase> t.get 'r1', {COLUMN => 'c1', TIMESTAMP => ts1, VERSIONS => 4}
hbase> t.get 'r1', {FILTER => "ValueFilter(=, 'binary:abc')"}
hbase> t.get 'r1', 'c1'
hbase> t.get 'r1', 'c1', 'c2'
hbase> t.get 'r1', ['c1', 'c2']
hbase> t.get 'r1', {CONSISTENCY => 'TIMELINE'}
hbase> t.get 'r1', {CONSISTENCY => 'TIMELINE', REGION_REPLICA_ID => 1}
简单来说就是
get+ '命名空间:表名' +过滤信息
get 'hadoop:student','1000'
scan格式
hbase> scan 'hbase:meta'
hbase> scan 'hbase:meta', {COLUMNS => 'info:regioninfo'}
hbase> scan 'ns1:t1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
hbase> scan 't1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
hbase> scan 't1', {COLUMNS => 'c1', TIMERANGE => [1303668804000, 1303668904000]}
hbase> scan 't1', {REVERSED => true}
hbase> scan 't1', {ALL_METRICS => true}
hbase> scan 't1', {METRICS => ['RPC_RETRIES', 'ROWS_FILTERED']}
hbase> scan 't1', {ROWPREFIXFILTER => 'row2', FILTER => "
(QualifierFilter (>=, 'binary:xyz')) AND (TimestampsFilter ( 123, 456))"}
hbase> scan 't1', {FILTER =>
org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1, 0)}
hbase> scan 't1', {CONSISTENCY => 'TIMELINE'}
hbase> scan 't1', {ISOLATION_LEVEL => 'READ_UNCOMMITTED'}
hbase> scan 't1', {MAX_RESULT_SIZE => 123456}
简单来说就是
scan+ '命名空间:表名' +过滤信息
scan 'hadoop:student'
删除数据
两个格式:
hbase> t.delete 'r1', 'c1', ts1
hbase> t.delete 'r1', 'c1', ts1, {VISIBILITY=>'PRIVATE|SECRET'}
Hbase的每个的列族都有对应的维护版本,也就是在创建列族的时候设置的,这里演示一下把info列族的维护版本修改为3.
alter 'hadoop:student',NAME=>'info',VERSIONS=>3
也就是说每个单元格都有三个版本,如果使用第一中格式删除,只会删除最新的版本,第二张格式删除那么全部版本都删除掉。
这里我向同一个单元格再次加入两个数据:
put 'hadoop:student','1000','info:name','super_cool0'
put 'hadoop:student','1000','info:name','super_cool00'
查看:1000行显示了最新的数据。
这时候我们删除最新的数据:
delete 'hadoop:student','1000','info:name'
可以看到,这个单元格还有数据,只不过是上个版本的。
然后我们删除这个单元格的全部版本的数据,也就是清空这个单元格。
deleteall 'hadoop:student','1000','info:name'
11 总结
注意版本兼容性,我这几个版本兼容性是对的,若是想装其他版本,最好查一下兼容性。