1.安装前准备工作
1.1JDK安装
详见前面的文章:https://blog.csdn.net/qq_38633279/article/details/105802279
1.2.SSH免密登录
rm -rf.ssh
ssh-keygen #然后一路回车
cd .ssh
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
ssh data date #输入yes
ssh data date #这个是不用输入密码直接获取时间,验证可以
2.HDFS的安装
2.1上传文件
stp
mv hadoop-2.6.0-cdh5.16.2.tar.gz /home/hadoop/software/
su -hadoop
cd /home/hadoop/software/
ll
2.2HDFS环境配置
useradd hadoop #创建用户
su - hadoop #登录hadoop用户
which java #检查java环境
mkdir tmp sourcecode software shell log lib data app #创建目录
cd software/
tar -xzvf hadoop-2.6.0-cdh5.16.2.tar.gz -C ../app/ #解压
cd
ll
cd app
ll
ln -s hadoop-2.6.0-cdh5.16.2 hadoop #建立软连接
#软连接的文件夹权限是777
cd hadoop/etc/hadoop
vi hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_221 #这个是修改,不是新增,一定记得
--------------------------------------------------
cd
vi .bashrc
export HADOOP_HOME=/home/hadoop/app/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source .bashrc
========================
cd /home/hadoop/app/hadoop/etc/hadoop #这个是绝对路径
2.3HDFS文件配置
1>
cd /home/hadoop/app/hadoop/etc/hadoop #这个是绝对路径
vi slaves
data
----------------------
2>
vi core-site.xml #nn启动以data名称启动
etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://data:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp/</value>
</property>
</configuration>
3>
vi hdfs-site.xml #snn启动以data名称启动 etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>data:9868</value>
</property>
<property>
<name>dfs.namenode.secondary.https-address</name>
<value>data:9869</value>
</property>
</configuration>
2.4HDFS格式化(仅限第一次)
cd ../../ #退回到app下面的hadoop,如下:/home/hadoop/app/hadoop
bin/hdfs namenode -format #格式化
2.5启动nn snn
sbin/start-dfs.sh #启动 是在/home/hadoop/app/hadoop这个目录下相当于 cd app/hadoop
jps #查看进程
DataNode dn #负责存储数据
NameNode nn #负责分配数据存储的 是老大
SecondaryNameNode #万年老二,默认按1H去备份老大的数据
通过pid找端口号
netstat -nlp | grep pid #pid是NameNode的pid
然后在电脑网页上输入:公网IP:50070
**即说明hadoop的HDFS已经安装成功**
2.6.HDFS的使用
2.6.1创建用户
bin/hdfs dfs -mkdir /user #创建文件
bin/hdfs dfs -ls / #查看
bin/hdfs dfs -mkdir /user/hadoop #创建用户名
2.6.2创建文件夹
bin/hdfs dfs -mkdir /wordcout
bin/hdfs dfs -mkdir /wordcout/input/
2.6.3将linux中文件上传到hadoop (-put)
bin/hdfs dfs -put linux中文件名称 HDFS放置路径
bin/hdfs dfs -put etc/hadoop/*.xml /wordcout/input/
=============================
在Web界面–>Utilitied–>Browse the file system #这里就可以查看文件是否上传
2.6.4计算
bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.16.2.jar
grep /wordcout/input /wordcout/output ‘dfs[a-z.]+’
2.6.5 将hadoop文件下载到linux(-get)
bin/hdfs dfs -get hadoop文件路径 linux文件路径
bin/hdfs dfs -get /wordcout/output output
2.6.6在linux查看
cat output/
cat part-r-00000
3.yarn的安装
yarn包含ResourceManager和NodeManager
3.1yarn环境配置
cd app/hadoop/etc/hadoop
mv mapred-site.xml.template mapred-site.xml
1>
vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
----------------------------
2>
vi yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>data:18088</value>
</property>
</configuration>
3.2yarn启动进程
cd ../../
sbin/start-yarn.sh #启动YARN
3.3查看进程
jps #查看进程
ResourceMangage
NodeManage
netstat -nlp | grep ResourceManage的pid
--------------------------
web界面
http://外网IP:18088 #说明yarn配置成功
3.4yarn应用案例(词频统计)
3.4.1创建数据
cd
cd data
rm -rf *
vi 1.log
vi 2.log
3.4.2创建文件夹
cd app/hadoop
hdfs dfs -mkdir /wordcount
hdfs dfs -mkdir /wordcount/input
hdfs dfs -mkdir /wordcount/input
3.4.3将linux数据上传到yarn
hdfs dfs -put * /wordcount/input/
hdfs dfs -ls /wordcount/input/ #查看文件是否已经传送到hadoop
3.4.4查找案例jar包
cd
cd /app/hadoop
find ./ -name ‘example’ # ./表示当前路径
hadoop jar
./share/hadoop/mapreduce2/hadoop-mapreduce-examples-2.6.0-cdh5.16.2.jar
wordcount /wordcount/input wordcount/output #wordcount/output这个是不存在的,否则报错
刷新web界面
3.4.5将yarn数据下载到linux
hdfs dfs -ls wordcount/output
hdfs dfs -get wordcount/output/part-r-00000 #这个后面没有添加下载的路径,则默认现在到当前路径
cat hdfs part-r-00000
以上是hadoop伪分布的安装方式
4.其他
当出现进程信息出现:-- process information unavaiable
使用jps,不能代表进程存在或者不存在,特别是使用jps检测状态,相当眼见不一定为真
解决方法
ps -ef | grep PID(进程) #查看进程是否真的有问题,
1.这个进程是否有问题,
文件被删除,不影响进程的重启
sbin/stop-all.sh
pid文件
1.pid默认存储位置
默认存储子/tmp
.pid文件存储的内容是维护进程的PID,相当于写死了PID
kill -0 PID #首先读取.pid文件的pid,然后再杀死进程
2.pid文件被删除,会影响进程的重启
进程的启动,是pid文件写入进程pid的数字
进程的关闭,是pid文件读取pid数字,然后kill -9 pid #其中pid里面是数字
linux的/tmp/文件会有30天的默认删除机制
总结
pid文件生产不要丢在/tmp目录中
因为这个是影响进程的启动停止
如何修改pid存储目录
在配置当中
cd /usr/local/hadoop/etc/hadoop/ #这里可以查看绝对路径
vi hadoop-env.sh
export HADOOP_PID_DIR=XXX #这个需要强行修改
这个存放在位置上面,然后进入到这个目录下面,然后ll查看一下里面都有哪些pid文件
===============
5.块
HDFS存储大文件利好,存储小文件是损害自己的,
适合存储大文件,不适合小文件,不代表不能存储小文件
文件总共大小为260M
上传到hdfs,将文件切分成块,dfs.blocksize xxx=128M
128M
128M
4M
副本数:
伪分布阶段 1阶段 副本数 dfs.replication 1
生产上HDFS集群的机器数量>=3 ,但是副本数dfs.replication=3设置为3,一般情况就够用了,没有必要设置多个。
通过设置副本数,来让文件存储在大数据HDFS平台上有容错保障
存储副本数=3 存储时间大小=文件大小3=2603=780M存储空间
5个块的元数据信息存储比3个块的元数据信息存储维护多,这个有namenode(处理块)维护块的信息,尽量减少块的分隔。
所以nn是不喜欢小文件
如
1亿个10kb文件 3亿个block
1亿个10kb文件压缩成1kw个文件100M 3kw个block
如何规避小文件
1.数据传输到hdfs之前,就合并
2.数据已经在hdfs上,就定时去合并不常用的文件