Hadoop(Lucene的改进)
特性
高可靠性:维护多个副本(默认三备份)
高扩张性:动态增加结点
高效性:并行
高容错性:自动保存多份备份
Hadoop组成
MapReduce(计算):分布式的离线并行计算框架
yarn(资源调度):作业调度与集群资源管理的框架
hdfs(数据存储):(Hadoop distributed file system) 分布式文件系统
common(公共辅助工具)
NameNode(nn):存储文件的元数据
DataNode:本地文件系统存储文件块的数据
second namenode: 用来监控hdfs状态的辅助后台程序,每隔一段时间获取hdfs元数据的快照 (一主三从,起替代作用)
MapReduce:在Hadoop的下的share下有Hadoop,内部有MapReduce的
伪分布式
就是一个节点的分布式(hadoop是分布式操作,是由多个节点构成)
运行hadoop的本地模式
- 首先配置文件:etc/hadoop/hadoop-env.sh
配置Java的运行路径export JAVA_HOME=/usr/java/latest
用bin/hadoop测试是否成功 - 创建目录mkdir input
复制xml文件cp etc/hadoop/.xml input
运行自带的一个MapReduce的样例程序,输出文件夹要求是不存在的文件夹,bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output ‘dfs[a-z.]+’
查看输出结果cat output/
运行Wordcount
创建文件夹mkdir wcinput
在wcinput文件夹下创建一个文件:touch wc.input
编辑vi wc.input
输入:
hadoop yarn
hadoop mapreduce
回到hadoop-2.7.2的目录下执行hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput命令
查看结果cat wcoutput/part-r-00000
伪分布式配置
- 首先配置vi etc/hadoop/hadoop-env.sh
export JAVA_HOME=/opt/software/java/jdk1.8.0_144 - 配置vi etc/hadoop/core-site.xml
*当namenode和datanode都启动成功之后,用192.168..:50070即可访问(在hadoop3.以后50070改为) namenode部能总格式化,因为datanode是根据namenode生成的,当生成了datanode又格式化了namenode,则namenode和datanode不匹配则启动不能成功,查看namenode的ID在cd data/tmp/dfs/name/current/下的version中,datanode的ID在cd data/tmp/dfs/data/current/下的version中
执行集群
- 配置yarn.env.sh文件,添加Java的工作路径
- 配置yarn.site.xml文件
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=103; host<105; host++)); do
echo ------------------- hadoop$host --------------
rsync -av $pdir/$fname $user@hadoop$host:$pdir
done
注释:1. basename意为获取路径中的最后文件名 example:basename /opt/software/hadoop 结果为hadoop
2. dirname意为获取绝对路径,dirname hadoop 结果为.,需要获取全部的/opt/software则需要加-p(还可以查询到软连接的目录)
3. whoami意为查看当前用户
修改脚本权限:chmod +x xsync
配置集群
在配置完全分布式集群需要按照集群部署对core-site.xml,hdfs-site.xml,MapReduce-site.xml,yarn-site.xml进行不同的配置,然后对hadoop-env.sh,MapReduce-env.sh,yarn-env.sh进行Java路径的配置
对core-site.xml进行配置
1.首先生成一个密钥对,用命令ssh-keygen -t rsa 就生成了公钥和密钥
2.然后将生成的私钥发送给远程通信的机器,用ssh-copy-id hadoop102命令即可发送
3.用ssh hadoop102即可直接操作102
但是使用集群登录需要所有的机器既可以访问自己还可以访问其他所有机器需要重复发送很多遍密钥,
1.可以使用脚本重复执行发送私钥的命令,但是第一次登录需要密码,脚本中出现密码不安全
2. 首先让机器可以自己登录自己,然后使用脚本将ssh的文件夹给每一个机器发送一遍
3. 配置完之后需要启动告知主机,其子节点有哪些,在hadoop/etc/hadoop下有slaves的文件,在里面输入集群的子机器
== 在每次配置文件之后一定要用xsync把文件同步到集群的每一台机器上。
配置yarn的历史服务器和日志聚集(方便服务器崩溃之后查询)
1.首先停止yarn(stop-yarn.sh)和hdfs(stop-dfs.sh)再配置
2.配置mapred-site.xml
yarn
资源调度者,类似一个pool池,当有新的需求进入的时候进行资源的分配,默认是容量调度器,分为多个区块,每个区块按照先来先服务(FIFO)的方式分配;但是容量调度器对资源的分配不够灵活,可以使用公平调度器来进行调度,会根据所来资源的多少进行合理的分配,减少资源的浪费
任务的推测执行
当有多个任务同时执行时,假设有8台机器,7台机器均速度快,其中一台速度远低于其他任务,hadoop于是新找一个节点(只找一个节点)执行备份任务,两个任务同时执行,其中快的保留结果,最慢的任务则remove掉
mapred-site.xml文件中默认是打开的
<property>
<name>mapreduce.map.speculative</name>
<value>true</value>
<description>If true, then multiple instances of some map tasks may be executed in parallel.</description>
</property>
<property>
<name>mapreduce.reduce.speculative</name>
<value>true</value>
<description>If true, then multiple instances of some reduce tasks may be executed in parallel.</description>
</property>
管理9000服务器
- hadoop fs -rm -r hdfs://192.168.153.101:9000/t*
删除以t开头的文件 - hadoop fs -rm -r hdfs://192.168.153.101:9000/*.txt
删除txt文件 - hadoop fs -mkdir /student
在根目录下创建文件夹 - hadoop fs -put student.txt /student
上传student文件 - hadoop jar 1.jar(jar包) com.atguigu.etl.ETLDriver(运行的主程序) /guli/video(输入文件位置) /guli/video_etl(输出文件位置)
使用jar包对数据进行清洗