I know, i know 地球另一端有你陪我
Hadoop
Hadoop是一个适合海量数据的分布式存储和分布式计算的平台
三大组件
hdfs: 是一个分布式存储框架,适合海量数据存储
mapreduce: 是一个分布式计算框架,适合海量数据计算
yarn: 是一个资源调度平台,负责给计算框架分配计算资源
1、安装
1 上传 hadoop 安装包并解压至 soft 文件夹
tar -xvf hadoop-2.7.6.tar.gz
2 配置环境变量,退出后重启配置文件
vim /etc/profile
增加hadoop环境变量,将bin和sbin都配置到PATh中
export HADOOP_HOME=/usr/local/soft/hadoop-2.7.6
export PATH=.:$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
3 修改配置文件
hadoop 配置文件在/usr/local/soft/hadoop-2.7.6/etc/hadoop/
3.1 slaves : 从节点列表(datanode)
vim slaves
//删除原对象
//增加node1, node2
3.2 hadoop-env.sh : Hadoop 环境配置文件
vim hadoop-env.sh
//修改JAVA_HOME
export JAVA_HOME=/usr/local/soft/jdk1.8.0_171
3.3 core-site.xml : hadoop核心配置文件
vim core-site.xml
//在 configuration 标签中间增加以下内容
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/soft/hadoop-2.7.6/tmp</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
3.4 hdfs-site.xml : hdfs配置文件
vim hdfs-site.xml
//在configuration中间增加以下内容
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
3.5 yarn-site.xml: yarn配置文件
vim yarn-site.xml
//在configuration中间增加以下内容
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</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>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>20480</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
3.6 mapred-site.xml: mapreduce配置文件
//重命名模板文件
mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
//在configuration中间增加以下内容
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
4 将 hadoop 安装文件分发到子节点
scp -r /usr/local/soft/hadoop-2.7.6/ node1:/usr/local/soft/
scp -r /usr/local/soft/hadoop-2.7.6/ node2:/usr/local/soft/
5 格式化namenode
hdfs namenode -format
6 启动 hadoop
start-all.sh
7 访问 hdfs 页面验证是否安装成功
http://master:50070
8 关闭 hadoop
stop-all.sh
附:如果安装失败
stop-all.sh
再次重启的时候
1、需要手动将每个节点的tmp目录删除: 所有节点都要删除
rm -rf /usr/local/soft/hadoop-2.7.6/tmp
然后执行将namenode格式化
2、在主节点执行命令:
hdfs namenode -format
3、启动hadoop
start-all.sh
2、基本操作
由于 hadoop 是内置于 linux,并且大部分操作指令和 linux 相同 为了区分,需要在指令前加上 hadoop dfs
1、创建目录 mkdir
hadoop dfs -mkdir
2、递归创建目录
hadoop dfs -mkdir -r
3、查看当前路径
hadoop dfs -ls
4、从当前 linux 中上传文件 put 至 hadoop hdfs 数据库
hadoop dfs -put linux中的文件 hadoop中的路径
hadoop dfs -put students.txt /data/student
5、从 hadoop hdfs 数据库下载文件至当前 linux 路径
hadoop dfs hadoop中的文件
hadoop dfs -get /data/student/students.txt
6、复制
hadoop dfs -cp /data/a.txt /data/b/
7、查看文件内容(cat), 如果数据量比较大,不能使用
hadoop dfs -cat /data/student/students.txt
8、移动 (mv),物理层面文件没有移动,只是改变了元数据(目录结构)
hadoop dfs -mv /a.txt /a
9、删除文件(rm)目录(rmr)
hadoop dfs -rm /a/a.txt
hadoop dfs -rmr /a
并没有真正删除文件,只是将文件放到了回收站中,
/user/root/.Trash/Current ; 每一个用户都有一个回收站,会定期清空
<property>
<name>fs.trash.interval</name>
<value>1440</value> //此行即是时间
</property>
手动删除回收站
Hadoop dfs -rmr /user/root/.Trash/Current
10、强制删除,不经过回收站
hadoop dfs -rmr -skipTrash /a
11、查看文件末尾(tail)
hadoop dfs -tail /data/student/students.txt
-f : 一直等待查看
12、查看文件的大小
hadoop dfs -du -h /data
3、关于 Hadoop 的 hdfs
1、集群中不同的节点承担不同的职责
负责命名空间职责的节点称为主节点 name node(master node) 负责存储真实数据职责的节点称为从节点 data node(slave node)
其中主节点负责管理文件系统的文件结构,从节点负责存储真实的数据, 称为主从式结构(master-slaves)
注:类比 redis 中的主从复制
2、分布式存储
hadoop 将从节点划分为众多同样大小的块(block),每个块分配了 128MB 的空间大小
1、文件被上传后,会被自动划分,当小于 128MB,会被直接存储到该 block
2、当文件超出 128MB,系统允许10%的溢出,即小于 140.8MB ,一样会被存于一个 block
3、当文件超出允许溢出的范围,文件将会被储存于不同的 block 当中,即分布式存储
因此在分布式存储系统中,一个文件的数据可能分散在不同节点中
3、hdfs 中的节点
从节点(data node)负责存储数据: 数据节点具有储存数据、读写数据的功能, 其中存储的数据块(block)比较类似于硬盘中的"扇区"概念,是 HDFS 存储的基本单位
主节点(name node)负责指挥其它节点: 任何一个"文件系统"(File System, FS) 都需要具备根据文件路径映射到文件的功能, 命名节点就是用于储存这些映射信息并提供映射服务的计算机, 在整个 HDFS 系统中扮演"管理员"的角色,因此一个 HDFS 集群中只有一个命名节点
HDFS 命名空间(NameSpace): HDFS 支持传统的层次型文件组织结构。 用户或者应用程序可以创建、删除、移动或重命名文件,将文件保存在这些目录里 这种结构称为命名空间
在主节点上,为了加快用户访问的速度,会把整个命名空间信息都放在内存中, 当存储的文件越多时,那么主节点就需要越多的内存空间
4、hdfs 访问顺序
先访问主节点,查询数据在哪些从节点上存储,然后再到从节点读取
总结
hadoop dfsadmin -safemode get 命令是用来查看当前 hadoop 安全模式的开关状态
hadoop dfsadmin -safemode enter 命令是打开安全模式
hadoop dfsadmin -safemode leave 命令是离开安全模式
单纯修改从节点数据存储位置中的数据,是无法影响到主节点中获得的数据的 主节点存储的信息会详细到行!?
|