一、hadoop集群的安装
首先需要安装JDK
安装Hadoop:
1、上传hadoop-2.6.5.tar.gz到/usr/local目录下。
2、将hadoop包进行解压缩:tar -zxvf hadoop-2.6.5.tar.gz
3、对hadoop目录进行重命名:mv hadoop-2.6.5 hadoop
4、配置hadoop相关环境变量(注意:在.bashrc尾部加入以下内容)
vi ~/.bashrc
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
然后,执行命令:
source ~/.bashrc
二、Hadoop集群的配置
1、配置信息
node01: DataNode NodeManager
node02: NameNode DataNode ResourceManager NodeManager
node03: DataNode JobHistory NodeManager
node04: SecondaryNameNode DataNode NodeManager
2、需改Hadoop集群的配置
1. etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/java/latest
2. etc/hadoop/core-site.xml:
<property>
<name>fs.default.name</name>
<value>hdfs://node02:9000</value>
</property>
3. etc/hadoop/hdfs-site.xml:
<property>
<name>dfs.name.dir</name>
<value>/usr/local/data/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/data/datanode</value>
</property>
<property>
<name>dfs.tmp.dir</name>
<value>/usr/local/data/tmp</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.http.address</name>
<value>node02:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node04:50090</value>
</property>
4. mapred-site.xml:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>node03:10020</value>
<description>MapReduce JobHistory Server IPC host:port</description>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node03:19888</value>
<description>MapReduce JobHistory Server Web UI host:port</description>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/history/done</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/history/done_intermediate</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/usr/local/data/filecache</value>
</property>
<property>
<name>local.cache.size</name>
<value>10737418240</value>
</property>
5. yarn-site.xml:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node02</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>
slaves:
node01
node02
node03
node04
三、启动hdfs集群
启动hdfs:
1、格式化namenode:执行以下命令,hdfs namenode -format
2、启动hdfs集群:start-dfs.sh
3、验证启动是否成功:jps、50070端口
node01:datanode
node02: namenode、datanode
node03:datanode
node04:secondarynamenode、datanode
4、浏览器访问:node02:50070/
四、Hdfs命令行
HDFS shell
1.0查看帮助
hadoop fs -help <cmd>
1.1上传
hadoop fs -put <linux上文件> <hdfs上的路径>
1.2查看文件内容
hadoop fs -cat <hdfs上的路径>
1.3查看文件列表
hadoop fs -ls /
1.4下载文件
hadoop fs -get <hdfs上的路径> <linux上文件>
五、启动Hdfs YARN集群
node02上启动yarn:
1、启动yarn集群:start-yarn.sh
2、验证启动是否成功:jps、8088端口
resourcemanager、nodemanager
node01:nodemanager
node02:nodemanager
node03:nodemanager
node04:nodemanager
六、启动Hdfs历史集群
# node03上启动19888端口
mr-jobhistory-daemon.sh start historyserver
七、Hdfs namenode定义以及namenode的作用
关于文件-块-DataNode关系的元数据保存到内存中
HA(High Availablity)高可用,一主一从,从节点不断给主节点发送心跳信息,重试几次依然没有收到主节点返回的信息,就认为主节点死掉了,从节点变为主节点。两个主节点同时存在问题是脑裂,从节点发出请求强制关闭主节点。
fsimage
edits日志文件
八、datenode的作用含义 以及扩缩容
文件内容保存在磁盘上,并维护块和本地文件的关系
节点的动态添加和删除 hdfs dfsadmin -refreshNodes
SecondaryNameNode 把大量的edits文件合并到fsimage,加快namenode的启动速度
九、什么是Hadoop的map reduce 以及hadoop的map reduce原理
1、Map 阶段
每个节点单独处理一个文件切片(缺省就是一块)
处理后的结果文件先排序存储在100M内存中,如果达到80%,则转存到本地硬盘,一个分区一个文件
map任务
2、Shuffle阶段
连接Map和Reduce
按key排序map的输出,相同key的value排在一起
把各个节点上的map输出合并在一起
将各个map机器上的0号分区文件copy到0号的reduce机器上,会有多个分区文件,进行两两归并排序,排序结果进行分组传给reduce方法
Combiner 对map的输出文件进行一次reduce,减少数据大小,提高处理效率
3、Reduce阶段
汇总合并Map阶段的大量的结果文件
处理后的结果文件存储在HDFS里面
reduce任务
4、统计单词的次数
Map
每次从文件切片读取一行,按空格切分出来多个单词,每个单词标记次数为1
输入:in_key(每行的偏移量), in_value(每行的内容)
输出:out_key(单词), out_value(次数:1)
Reduce
相同的单词会得到所有的次数1,求和所有的次数,就是单词的总数
输入:in_key(map的输出key:单词),in_value(map的输出value的集合)
输出:out_key(单词), out_value(总数)
十、Idea提交任务到集群的问题
Mapper类没有找到
将mapreduce类生成jar
修改Idea里的core-site.xml
<property>
<name>mapred.jar</name>
<value>c:\\test.jar</value>
</property>