Hadoop
大数据
无法在一定的时间范围内,使用常规的工具存储、处理的大数据量的集合,需要新型的存储方式来处理海量的数据,可以从各式各样的数据中发掘有价值的信息。
特性
-
大体量,TB 级的数据存储
存储单位:
1byte = 8bit
1KB = 1024byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB =1024TB
1EB = 1024PB -
多样性,种类多,来源多
-
时效性,很多数据需在一定时间内处理
-
准确性,处理的结果保证一定的准确性
-
大价值,挖掘有价值的信息
大数据带来的问题
- 数据存储问题:存储的空间、存取速度
- 数据计算及分析的效率
Hadoop
- 分析、处理海量数据的开源软件平台,java开发
- 分布式计算的框架
1.一份数据分四份,分别存到四个服务器磁盘
2.存数据的服务器节点—>datanode
3.管理
数
据
节
点
数据节点
数据节点的---->namenode
namemode–
1.存储文件的元信息,如大小、分块等。
2.心跳机制,检测datanode的状态
防止datanode挂掉,提高hadoop的高可用性,引入副本冗余机制,却降低了磁盘的利用率。
防止namenode挂掉,建立secondary namenode,不断与namenode保持同步,一旦namenode挂掉,secondary namenode立即取代
防止路由器挂掉,建立多个机架,如下:
多个集群
以上为HDFS,hadoop distributed file system
纵向扩展:在一台服务器上,升级硬件,如增加磁盘阵列
横向扩展:增加多个服务器,构建集群,hadoop思想
Hadoop特性
- 高可靠
- 高可扩展性,横向
- 高效性,节点之间动态的移动数据,建立副本
- 高容错性,hadoop默认存储数据的3个副本,失败的任务自动重新分配
环境安装
linux安装java JDK
- 更新源 sudo apt-get update
- 解压jdk到/usr/local
必须指定-C参数lauf@master:~$ sudo tar -zxvf jdk-xxxx.tar.gz -C /usr/local
- 重命名
lauf@master:~$ cd /usr/local lauf@master:~$ sudo mv jdk1.8.0_251/ jdk8 #重命名为jdk8
- 配置环境变量
lauf@master:~$ cd /home/lauf #用户的家目录 lauf@master:~$ sudo vim .bashrc #输入G -->跳到文件末尾 #添加配置 export JAVA_HOME=/usr/local/jdk8 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=.:$JAVA_HOME/bin:$PATH #保存,退出编辑状态 #Esc键---返回命令模式 #shift + zz 保存退出 lauf@master:~$ source .bashrc #使用配置生效
- 查看JDK是否安装成功
lauf@master:~$ java -version #查看版本
安装Hadoop, 并配置伪分布式
伪分布式就是Hadoop集群主从节点进程均在同一台机器同一JVM
- 安装ssh,并配置免密登录(master->slave)
lauf@master:~$ sudo apt-get install ssh #或者openssh-server
#安装完成后,使用ssh 登录本地系统
lauf@master:~$ ssh localhost #此时需要输入当前用户密码
#使用其他用户登录
lauf@master:~$ ssh tom@localhost #此时输入tom 的密码
tom@localhost's password:
#查看ssh服务的状态
lauf@master:~$ sudo /etc/init.d/ssh status
lauf@master:~$ sudo /etc/init.d/ssh start/stop/restart #开启服务、停止服务、重启服务
#配置ssh免密登录
lauf@master:~$ ssh-keygen -t rsa #生成rsa密钥,存储在家目录下的.ssh目录
lauf@master:~$ cd /home/lauf
lauf@master:~$ cd .ssh
lauf@master:~/.ssh$ ls
authorized_keys id_rsa id_rsa.pub known_hosts
#将公钥id_rsa.pub内容放到服务端的/home/lauf/.ssh/authorized_keys中
#登录localhost时,localhost就是服务端
lauf@master:~/.ssh$ sudo scp id_rsa.pub lauf@ip:/home/lauf/.ssh/authorized_keys
#重新登录远程服务端
lauf@master:~/.ssh$ ssh ip #不再需要密码
如果以上操作无效,可以配置其他的一些配置项:
/etc/ssh–>ssh_config PasswordAuthentication yes 取消注释
/etc/ssh–>sshd_config PermitRootLogin yes
重启服务
sudo /etc/init.d/ssh restart
2.将下载的hadoop-xxx.tar.gz解压到/usr/local
lauf@master:~$ tar -zxvf hadoop-xxx.tar.gz -C /usr/local
#重命名
lauf@master:~$ cd /usr/local
lauf@master:~$ sudo mv hadoop-2.10.0 hadoop2.10 #重命名
#改所属用户、组
lauf@master:~$ sudo chown -R lauf:lauf hadoop2.10/
- 验证Hadoop是否安装成功
lauf@master:~$ cd /usr/local/hadoop2.10/bin
lauf@master:~$ ./hadoop version
- 设置Hadoop 的JDK配置路径
hadoop-env.sh
yarn-env.sh
mapred-env.sh
均配置JDK
lauf@master:~$ cd /usr/local/hadoop2.10/etc/hadoop
lauf@master:~$ sudo vim hadoop-env.sh
#/java 搜索 并更改JAVA_HOME如下
export JAVA_HOME=/usr/local/jdk8
其他两个采用同样的方式配置JDK。
- 配置Hadoop的环境变量
lauf@master:~$ cd /home/lauf
lauf@master:~$ sudo vim .bashrc
#shift+g跳到文件的末尾
#末尾添加
export HADOOP_HOME=/usr/local/hadoop2.10
export CLASSPATH=.:${JAVA_HOME}/lib:${HADOOP_HOME}/sbin:$PATH
export PATH=.:${HADOOP_HOME}/bin:${HADOOOP_HOME}/sbin:$PATH
#保存退出
#使配置生效
lauf@master:~$ source .bashrc
#验证Hadoop 是否配置成功
hadoop version
- 配置伪分布式
1)配置文件下修改core-site.xml 和 hdfs-site.xml
#配置core-site.xml
lauf@master:~$ cd /usr/local/hadoop2.10/etc/hadoop
lauf@master:~$ sudo vim core-site.xml
#增加配置
<configuration>
<property>
<name>hadoop.tmp.dir</name>#配置Hadoop临时文件保存路径
<value>file:/usr/local/hadoop2.10/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>#配置Hadoop默认端口
<value>hdfs://localhost:9000</value> #完全分布式时,则为NameNode节点地址,不能再使用localhost
</property>
</configuration>
#配置hdfs-site.xml
lauf@master:~$ sudo vim hdfs-site.xml
#增加配置
<configuration>
<property>
#副本数量
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop2.10/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop2.10/tmp/dfs/data</value>
</property>
</configuration>
- 配置yarn 资源管理器
#配置mapred-site.xml
lauf@master:~$ cd /usr/local/hadoop2.10/etc/hadoop
lauf@master:~$ cp mapred-site.xml.template mapred-site.xml #复制一份
lauf@master:~$ sudo vim mapred-site.xml
#添加配置
<property>
<name>mapreduce.framework.name</name>#mapReduce的资源调度框架采用yarn
<value>yarn</value>
<name>mapreduce.jobhistory.address</name>#jobhistory服务器端地址
<value>master:10020</value>
<name>mapreduce.jobhistory.webapp.address</name>#jobhistory的Web端地址
<value>master:19888</value>
</property>
#配置yarn-site.xml
lauf@master:~$ sudo vim yarn-site.xml
#增加配置
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>#配置担当resourcemanager的节点
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>#reduce获取数据方式为shuffle
</property>
- namenode 格式化
lauf@master:~$ cd /usr/local/hadoop2.10/bin
lauf@master:~$ ./hdfs namenode -format
#异常问题
#java.io.IOException: Cannot create directory /usr/local/hadoop/hdfs/name/current
#解决:sudo chmod -R u+w /usr/local/hadoop2.10/
#Storage directory /usr/local/hadoop2.10/tmp/dfs/name has been successfully formatted. 则成功格式化
- 启动Hadoop所有组件
在master(NameNode)上,启动Hadoop集群
lauf@master:~$ start-all.sh #deprecated
#也可以使用如下方式
lauf@master:~$ start-dfs.sh
lauf@master:~$ start-yarn.sh
- 查看节点
web方式:
http://localhost:50070 #查看hdfs
http://localhost:8088 #查看yarn
命令方式:
lauf@master:~$ jps #查看相关组件进程
- 上传文件,并查看
lauf@master:~$ hadoop fs -put test.mp4 / #将test.mp4上传至根目录下
lauf@master:~$ hadoop fs -ls / #查看根目录下的文件
#也可在浏览器中查看utilities
完全分布式
配置基本与伪分布式相同,在各节点遵循伪分布式安装与配置的基础上,执行如下:
1.配置/etc/hosts
在master上配置所有的集群节点IP hostname,然后将该文件同步到所有其他节点。
sudo vim /etc/hosts
192.168.43.107 master #需配置静态IP地址
192.168.43.108 slave1
192.168.43.109 slave2
xsync /etc/hosts #xsync是自己封装的rsync
注意:
在同步文件夹的时候,可能出现当前用户在远端服务器无法创建目录的情况,必须使当前用户一登录就具有root权限。
方案:
将/etc/passwd中当前用户的uid改为0
此时ssh user@remoteserver相当于root的远程登录
需要修改服务器sshd服务的配置文件
sudo vim /etc/ssh/sshd_config
PermitRootLogin yes
#重启服务
sudo service sshd restart
解决!!一般不建议这样做
2.更改集群中每个主机的名字
sudo vim /etc/hostname
master/slave1/slave2
3.配置文件slaves
在master上配置conf/slaves(列出所有的从节点),然后同步到其他节点
sudo vim slaves
slave1
slave2
#列出所有的从节点
xsync /usr/local/hadoop2.10/etc/hadoop/slaves #必须给绝对路径
4.配置master到slave的SSH免密登录
5.在master上开启集群
start-all.sh
#或者
start-dfs.sh
start-yarn.sh
#从节点的进程会被开启
- 在master上查看集群状况
hdfs dfsadmin -report
Configured Capacity: 19942490112 (18.57 GB)
Present Capacity: 11407425536 (10.62 GB)
DFS Remaining: 11407400960 (10.62 GB)
DFS Used: 24576 (24 KB)
DFS Used%: 0.00%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
Pending deletion blocks: 0
Live datanodes (1):
Name: 192.168.43.108:50010 (slave1)
Hostname: slave1
Decommission Status : Normal
Configured Capacity: 19942490112 (18.57 GB)
DFS Used: 24576 (24 KB)
Non DFS Used: 7498444800 (6.98 GB)
DFS Remaining: 11407400960 (10.62 GB)
DFS Used%: 0.00%
DFS Remaining%: 57.20%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Fri Aug 06 11:30:09 CST 2021
Last Block Report: Fri Aug 06 11:29:30 CST 2021
查看不到集群信息,则没有配置好
- 查看资源管理器节点
yarn node -list #yarn-site.xml 必须配置yarn.resourcemanager.hostname-->master
Hadoop增加一个datanode
在master上的操作
- 配置slaves,加入新节点
sudo vim /usr/local/hadoop2.10/etc/hadoop/slaves
slave1
slave2 #加入新节点
将slaves配置文件同步到集群中的所有机器
xsync /usr/local/hadoop2.10/etc/hadoop/slaves
- 配置hosts,加入新节点
sudo vim /etc/hosts
ip1 slave1
ip2 slave2 #加入新节点
将hosts同步到集群中的所有机器
在新节点slave2上的操作
- 保持hadoop与master同配置
- 开启datanode进程
hadoop-daemon.sh start datanode
jps
#若未启动,则删除hadoop2.10/tmp 目录
#重试
- 开启nodemanager进程
yarn-daemon.sh start nodemanager
- 在master上查看从节点
hdfs dfsadmin -report
可以查看到新的从节点,表示添加节点成功!!