hadoop大数据分布式文件系统
官方:hadoop.apache.org实验环境:5台实验环境干净的虚拟机eg:cd /var/lib/libvirt/imageslsrm -rf test1 #删掉之前实验用的虚拟机【一定要是虚拟机关闭的情况下】qemu-img create -f qcow2 -b test.qcow2 test1 #创建虚拟机,修改ip和主机名virsh start test1真机中:scp jdk-8u1
目录
创建完全式分布系统,把namenode和datanode分开
官方:hadoop.apache.org
实验环境:
5台实验环境干净的虚拟机
eg:cd /var/lib/libvirt/images ls rm -rf test1 #删掉之前实验用的虚拟机【一定要是虚拟机关闭的情况下】 qemu-img create -f qcow2 -b test.qcow2 test1 #创建虚拟机,修改ip和主机名 virsh start test1
真机中:
scp jdk-8u181-linux-x64.tar.gz server1: scp hadoop-3.2.1.tar.gz server1:
安装调用hadoop单机模式
server1:
把本次实验需要的两个包传给hadoop用户的根目录
两个包要是root用户的花hadoop用户没有执行和写的权限
解决办法1:
在超级用户中给hadoop执行和写的权限
#没有权限是不能解压和写文件的
useradd hadoop
chown hadoop.hadoop hadoop-3.2.1.tar.gz
chown hadoop.hadoop jdk-8u181-linux-x64.tar.gz
chmod 755 hadoop-3.2.1.tar.gz
chmod 755 jdk-8u181-linux-x64.tar.gz
ll
把给好权限的包给hadoop用户
mv jdk-8u181-linux-x64.tar.gz /home/hadoop/
mv hadoop-3.2.1.tar.gz /home/hadoop
su - hadoop
tar zxf jdk-8u181-linux-x64.tar.gz
tar zxf hadoop-3.2.1.tar.gz
ll
ln -s jdk1.8.0_181/ java #做软连接方便之后更新操作
ln -s hadoop-3.2.1 hadoop
ll
cd hadoop/etc/hadoop/
vim hadoop-env.sh #修改环境变量文件
54 export JAVA_HOME=/home/hadoop/java
58 export HADOOP_HOME=/home/hadoop/hadoop
cd ..
cd ..
bin/hadoop #调命令的路径,可以运行就没有问题,二进制程序就安装好了
mkdir input
pwd
ls
cp etc/hadoop/*.xml input #所有的配置文件拷贝到刚才新建的input目录里
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar
#调用jar包
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'
#过滤input里的文件,关键字是以dfs开头的,输出到output里,
cd output/ #输出目录是不存在的,在输出的时候会自动创建
ls
cat *
搭建伪分布式
cd ..
cd etc/hadoop/
vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value> #本机9000端口
</property>
</configuration>
vim hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value> #用来控制副本数,当前就1个节点,所以是1
</property>
</configuration>
ssh-keygen # 创建免密文件【分布式的方式需要所有节点都免密】
cd .ssh/
ls
cp id_rsa.pub authorized_keys #给公钥改名
chmod 600 authorized_keys
ll
ssh localhost #检验已经免密
logout
**在完全分布式的情况下是通过免密的形式来启动远端的进程
cd
pwd
cd hadoop
bin/hdfs namenode -format #调用这个命令 namenode -format是用来做格式化的
ls /tmp/ #默认master命令存到/tmp/里
ls
sbin/start-dfs.sh #调用脚本启动hadoop
Starting namenodes on [localhost] #hdfs的名称节点
Starting datanodes #hdfs的数据节点
Starting secondary namenodes [server1]
server1: Warning: Permanently added 'server1,172.25.70.1' (ECDSA) to the list of known hosts.
ls
cd
cd java/
ls
cd bin/
ls
pwd
cd
vim .bash_profile
10行:PATH=$PATH:$HOME/.local/bin:$HOME/bin:/home/hadoop/java/bin
source .bash_profile #刷新
cd
jps #jps指令专门用来查看java命令【可以看到启动了三个进程】
ps ax
网页中: 172.25.70.1:9870--overview--live nodes--可以看到有一个server1节点
utilities---可以浏览文件系统和日志
给文件系统加东西:
cd hadoop
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/hadoop
id
bin/hdfs dfs -ls 查询与当前用户匹配的/user/hadoop目录
bin/hdfs dfs -put input #上传input 默认上传/user/hadoop
bin/hdfs dfs -ls
ls
rm -rf output/ #删除刚才运行命令输出的目录
ls
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount input output #wordcount是统计单词数【统计input目录里输出到output目录】
ls #运行完在当前目录没有output
在网页中:刷新可以看到
bin/hdfs dfs -cat output/* #查看分布式文件系统的数据
bin/hdfs dfs -get output #从分布式把文件系统下载到本地【在运行时确保分布式文件系统没有同名目录,因为创建会自动新建,要是有会报错】
ls
cd output/
ls
cat *
cd ..
ls
rm -rf output/ #删除本地的output分布式文件系统依然存在
ls
创建完全式分布系统,把namenode和datanode分开
server2、3: 【要求创建用户的id和时间都与server1同步。全平台一致】
useradd hadoop
id hadoop
server1:
sbin/stop-dfs.sh #停掉伪分布式
logout #退出hadoop
要求所有节点配置相同
yum install -y nfs-utils #要求server1、2、3都装
vim /etc/exports
/home/hadoop *(rw,anonuid=1000,anongid=1000) #hadoop的id是1000
systemctl start nfs
showmount -e
server2、3中:
showmount -e 172.25.70.1
mount 172.25.70.1:/home/hadoop/ /home/hadoop/
#把172.25.70.1:/home/hadoop/挂接到本机的/home/hadoop/
df #查看挂接是否成功
su - hadoop
ls #可以看到数据同步
server1:
su - hadoop
ssh server1
logout
ssh server2
logout
ssh server3
logout
*访问都是免密的
ls
cd hadoop/etc/hadoop/
vim hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value> #用来控制副本数,现在有两个副本
</property>
</configuration>
vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://server1:9000</value> #master指向server1
</property>
</configuration>
vim workers #写如数据节点
server2
server3
清除之前留下的文件
rm -rf /tmp/hadoop*
ls
ls /tmp/
cd /tmp/
ls
rm -rf *
ls
cd
pwd
ls
cd hadoop
ls
jps
ps ax #所有的进程都被停掉了
bin/hdfs namenode -format #格式化
sbin/start-dfs.sh
#server1启动namenode【目前是完全分布式】
jps
#master上有SecondaryNameNode和NameNode
server2、3
su - hadoop
ls
jps #worker上只有datanode
网页:刷新后可以看到有两个活动的
server1:
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/hadoop
ls
bin/hdfs dfs -put input #上传
bin/hdfs dfs -ls #可以看到已经上传成功
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount input output
网页上输出目录也没有问题
热添加扩容节点:
在启动一个新的虚拟机4
server4:
useradd hadoop
yum install -y nfs-utils
mount 172.25.70.1:/home/hadoop/ /home/hadoop/ #同步数据目录
df
su - hadoop
ls
cd hadoop
cd etc/hadoop/
vim workers
添加:server4
ls
cd ..
cd ..
bin/hdfs --daemon start datanode #启动注意路径
jps
网页:可以看到当前有三个节点
server1:
cd hadoop/etc/hadoop/
vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
vim yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</ value>
</property>
</configuration>
vim hadoop-env.sh
59 export HADOOP_MAPRED_HOME=/home/hadoop/hadoop
cd
cd hadoop
ssh server4
sbin/start-yarn.sh
jps #多了一个RM
server2
jps #多了NM【并行计算框架】
网页上:172.25.70.1:8088
部署zk集群
需要一个zookeeper包:
scp /home/westos/zookeeper-3.4.9.tar.gz hadoop@172.25.70.1:
停掉所有进程
server1:
sbin/stop-yarn.sh
sbin/stop-dfs.sh
jsp
在server2、3、4中检查是否停掉
jsp
ps ax
server1、2、3、4:
rm -rf /tmp/*
#删掉/tmp/目录里的东西,因为tmp保存了之前的数据
server1:
cd
ls
tar zxf zookeeper-3.4.9.tar.gz
cd zookeeper-3.4.9/
servre2:
cd
cd zookeeper-3.4.9/
ls
cd conf/
ls
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
#最后添加:
server.1=172.25.70.2:2888:3888
server.2=172.25.70.3:2888:3888
server.3=172.25.70.4:2888:3888
#server后跟的是标识号id
2888:是网络通讯端口
3888:是选举端口
server2:
mkdir /tmp/zookeeper/
cd /tmp/zookeeper/
ls
echo 1 > myid
cat myid
server3:
mkdir /tmp/zookeeper/
cd /tmp/zookeeper/
ls
echo 2 > myid
cat myid
server4:
mkdir /tmp/zookeeper/
cd /tmp/zookeeper/
ls
echo 3 > myid
cat myid
server2、3、4:
cd
cd zookeeper-3.4.9/
ls
bin/zkServer.sh start
bin/zkServer.sh status
#server3是leader。server2、4是follower
NameNode高可用
在开一台虚拟机(server5)。最好给2g内存,作为高可用的备用master
server5:
useradd hadoop
yum install -y nfs-utils
mount 172.25.70.1:/home/hadoop/ /home/hadoop/
df
su - hadoop
ls
server1:
cd hadoop/etc/hadoop/
vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://masters</value> #指定masters
</property>
<property> #指定 zookeeper 集群主机地址
<name>ha.zookeeper.quorum</name>
<value>172.25.70.2:2181,172.25.70.3:2181,172.25.70.4:2181</value>
</property>
</configuration>
vim hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value> #有三个节点
</property>
<property> #指定 hdfs 的 nameservices 为 masters,和 core-site.xml 文件中的设置保持一致
<name>dfs.nameservices</name>
<value>masters</value>
</property>
<property> #masters 下面有两个 namenode 节点,分别是 h1 和 h2 (名称可自定义)
<name>dfs.ha.namenodes.masters</name>
<value>h1,h2</value>
</property>
<property> #指定 h1 节点的 rpc 通信地址
<name>dfs.namenode.rpc-address.masters.h1</name>
<value>172.25.70.1:9000</value>
</property>
<property> #指定 h1 节点的 http 通信地址
<name>dfs.namenode.http-address.masters.h1</name>
<value>172.25.70.1:9870</value>
</property>
<property> #指定 h2 节点的 rpc 通信地址
<name>dfs.namenode.rpc-address.masters.h2</name>
<value>172.25.70.5:9000</value>
</property>
<property> #指定 h2 节点的 http 通信地址
<name>dfs.namenode.http-address.masters.h2</name>
<value>172.25.70.5:9870</value>
</property>
<property> #指定 NameNode 元数据在 JournalNode 上的存放位置
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://172.25.70.2:8485;172.25.70.3:8485;172.25.70.4:8485/masters</value>
</property>
<property> #指定 JournalNode 在本地磁盘存放数据的位置
<name>dfs.journalnode.edits.dir</name>
<value>/tmp/journaldata</value>
</property>
<property> #开启 NameNode 失败自动切换
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property> #配置失败自动切换实现方式
<name>dfs.client.failover.proxy.provider.masters</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property> #配置隔离机制方法,每个机制占用一行
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<property> #使用 sshfence 隔离机制时需要 ssh 免密码
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property> #配置 sshfence 隔离机制超时时间
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
第一次启动 hdfs 必须先启动 journalnode。在三个 DN 上依次启动 journalnode
server2、3、4:
bin/hdfs --daemon start journalnode
jps #日志节点起来
server1
cd ../..
ls
bin/hdfs namenode -format #格式化HDFS集群
scp -r /tmp/hadoop-hadoop 172.25.70.5:/tmp
bin/hdfs zkfc -formatZK #格式化 zookeeper
ls
sbin/start-dfs.sh #启动 hdfs 集群
jps
查看各个节点的状态(server2、3、4、5)
网页:172.25.70.1:9870
server4:
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/hadoop
bin/hdfs dfs -put input #上传
server3:
cd
cd zookeeper-3.4.9/
ls
bin/zkCli.sh #调用命令行,看谁是master
--ls /
--get /hadoop-ha/masters
--get /hadoop-ha/masters/ActiveBreadCrumb
可以看到1是master
网页上:172.25.70.1:9870 #1是active
172.25.70.5:9870 #5是standby
模拟故障切换
server1:
jps
kill 19730 #杀掉master的进程
jps
server3:
--get /hadoop-ha/masters/ActiveBreadCrumb
可以看到5是master
网页上:172.25.70.5:9870 #5是active
server1:
bin/hdfs --daemon start namenode #启动hdfs
网页上:172.25.70.1:9870 #1是standby
NM高可用
cd hadoop/etc/hadoop/
vim yarn-site.xml
<property> #激活 RM 高可用
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property> #指定 RM 的集群 id
<name>yarn.resourcemanager.cluster-id</name>
<value>RM_CLUSTER</value>
</property>
<property> #定义 RM 的节点
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property> #指定 RM1 的地址
<name>yarn.resourcemanager.hostname.rm1</name>
<value>172.25.70.1</value>
</property>
<property> #指定 RM2 的地址
<name>yarn.resourcemanager.hostname.rm2</name>
<value>172.25.70.5</value>
</property>
<property> #激活 RM 自动恢复
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property> #配置 RM 状态信息存储方式,有 MemStore 和 ZKStore
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property> #配置为 zookeeper 存储时,指定 zookeeper 集群的地址
<name>yarn.resourcemanager.zk-address</name>
<value>172.25.70.2:2181,172.25.70.3:2181,172.25.70.4:2181</value>
</property>
sbin/start-yarn.sh #启动 yarn 服务
jps #server1、5启动的服务是RM。2、3、4启动的是NM
故障切换:
server3:
--get /yarn-leader-election/RM_CLUSTER/ActiveBreadCrumb
##查看当前的active【RM1】
网页:http://172.25.70.1:8088/ 可以看到1是master的状态
172.25.70.5:8088 可以看到5是standby的状态
故障模拟:
server1:
jps
kill 22527
server3:
--get /yarn-leader-election/RM_CLUSTER/ActiveBreadCrumb
##查看当前的active【RM2】
server1:
hbase分布式部署
真机中:scp hbase-1.2.4-bin.tar.gz hadoop@172.25.70.1:
server1:
cd
ls
tar zxf hbase-1.2.4-bin.tar.gz
cd hbase-1.2.4/
cd conf/
vim hbase-env.sh #定义环境变量
27 export JAVA_HOME=/home/hadoop/java
28 export HADOOP_HOME=/home/hadoop/hadoop
128 export HBASE_MANAGES_ZK=false
vim hbase-site.xml
<property> #指定 region server 的共享目录,用来持久化 HBase
<name>hbase.rootdir</name>
<value>hdfs://masters/hbase</value>
</property>
<property> #启用 hbase 分布式模式
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property> #Zookeeper 集群的地址列表
<name>hbase.zookeeper.quorum</name>
<value>172.25.70.2,172.25.70.3,172.25.70.4</value>
</property>
<property> #指定 hbase 的 master
<name>hbase.master</name>
<value>h1</value>
</property>
vim regionservers
server2
server3
server4
启动 hbase主节点运行:
bin/start-hbase.sh
jps
server2:
jps
备节点运行:
server5:
cd
cd hbase-1.2.4/
bin/hbase-daemon.sh start master
jps
server3:
--get /hbase/master #server1
网页:172.25.70.1:16010 #主server是1
测试:
server1:
bin/hbase shell #打开一个shell中端
--create 'test', 'cf' #创建
--list 'test'
--put 'test', 'row1', 'cf:a', 'value1'
--put 'test', 'row2', 'cf:b', 'value2'
--put 'test', 'row3', 'cf:c', 'value3'
--scan 'test'
网页:http://172.25.70.5:9870/ #上边有数据
故障切换:
server1:
jps
kill 23569 #杀掉master进程
网页:http://172.25.70.5:16010/ #5是master。backup master没有了
server1:
bin/hbase-daemon.sh start master #启动
网页:刷新:172.25.70.5:16010 backup master是1
server1:
bin/hbase shell
--scan 'test' #刚才的数据还在
更多推荐
所有评论(0)