Hadoop

=========================Hadoop目录==============================
bin:一些普通执行脚本
sbin:系统执行脚本,包含启动,停止的脚本
included:跟本地库相关的一些文件
etc:配置文件
lib:老版本的hadoop的话放jar,新版的则用来放本地库。
share:存放大量的java jar包,用来实现功能(用hadoop来写应用程序),share文件夹里面是doc 和 hadoop两个文件夹,doc里面是英文文档,可以删掉来加快速度,hadoop里面就是功能jar包。share/hadoop 里面是以工程分类的,包括如下工程:
=========================Linux机器记录============================
虚拟机( 笔记本):
[hadoop-0]:hostname:hadoop-0 password:hadoop
[hadoop-1]:hostname:hadoop-1 password:hadoop
公司电脑:
[hadoop-0]:hostname:hadoop-0 password:hadoop

======================搭建虚拟机环境==========================
1.配置网络:
VMware在window中生成的那个虚拟网的网关和window是的真实网卡没有任何关系:

VMware会在windows中提供两个虚拟网卡(VMnet1和VMnet8),如下图

如果想让VMware中的虚拟机(Linux)和本地的windows通信,则必须保证虚拟机和虚拟网卡在同一网段。所以我们需要做如下设置:
1.1在VMware中设置网关
进入vmware的菜单, Edit->VirtualNetworkEditor
GATEWAY:192.168.2.1
Subnet IP:192.168.2.0     
NETMASK:255.255.255.0
修改成功后,可以查看本地系统的网络,VMware的虚拟网卡(VMnet8),应该已经同步到了。


1.2设置虚拟网卡
windows中的VMnet8网卡也要设置成同一网段(如下图)

1.3设置Linux的网络
        如果是刚刚新建的Linux,则右键网络图标,选择Edit connections,选择IPv4,新建一个manual的静态IP
         如果不是新建的Linux,则可以直接通过setup 命令进行修改    //编辑ifcfg-eth0文件( vi  /etc/sysconfig/network-scripts/ifcfg-eth0)
        192.168.2.100      255.255.255.0    1 92.168.2.1    8.8.8.8
          然后重启网络:service network restart
         ping {网关} ping {linux ip}     ping {百度},如果拼通了,则说明成功了!


2.设置虚拟机
2.1开启sshd service,切换到ScureCRT去操作Linux
         进入root:su
         开启sshd:service sshd start
         运行ScureCRT,连接linux,hostname填ip地址
2.2 给用户加sudo权限(让普通用户可以执行admin权限的任务):
          增加sudoers文件的写权限:  su               chmod u+w /etc/sudoers
         在" root All=(ALL)ALL "下面加  {user name}  All=(ALL)ALL :  vi /etc/sudoers 
          去掉 sudoers文件的写权限:sudo chmod u-w /etc/sudoers
2.3 禁用图形界面:
          sudo vi /etc/inittab 将id改成3.
2.4 设置sshd service为开机启动项
          检查自启动列表:chkconfig --list
         设置sshd开机启动:sudo chkconfig sshd on
2.5修改hostname(有两种方式)(由于未来会有多个host,不能都叫locahost,所以要改成hadoop-0之类的名字)
         方式一:改配置文件,但是得重启之后才生效。
         修改network配置文件:sudo  vi /etc/sysconfig/network   
         重新启动虚拟机之后:可以看到 [hadoop@localhost ~]变成 [hadoop@hadoop-0 ~]
         方式二:、
          命令修改 :sudo hostname {hostname}
         退出客户端:exit
         重新连接客户端(SecureCRT):可以看到效果
2.6修改主机名和IP的映射关系(想要通过hostname访问这台机器,就得做IP映射)
         修改hosts文件:sudo vi /etc/hosts 192.1668.2.100 hadoop-0
         验证:ping {host name},如果ping通了,则成功了
   
    查看防火墙:
         查看   service iptables status     
          关闭 service iptables stop     
          查看防火墙开机启动状态:chkconfig iptables --list     
          关闭开机启动:chkconfig iptables off
    重启Linux:
          reboot 
    查看sshd service 状态:
          sudo service sshd status     启动sshd service:sudo service sshd start
    启动secureCRT,点击Quick connection。(hostname要写成ip)

3.安装JDK
3.1 上传JDK:
    在SecureCRT中按 Alt +p,打开SFTP窗口,然后输入命令:put {文件路径/文件名}
3.2创建app文件夹:
         mkdir app
3.3解压JDK到app文件夹
         tar -zxvf jdk-7u65-linux-i586.tar.gz -C app/
         -z:解压编码
          x:解压
         v:打印
         f:文件
         -C:解压的目的地
3.4配置环境变量:
          在profile文件( /etc/profile 末尾加上以下变量,这个profile文件配置好了以后,对每个用户都生效而不仅仅是当前用户。
               export JAVA_HOME=/home/hadoop/app/jdk-7u_65-i585     (javahome 的路径可以先进到app文件里面的jdk文件,然后用命令 pwd 打印出完整路径,然后复制就行了)
               export PATH=$PATH:$JAVA_HOME/bin
         如果写变量时不记得jdk路径了,则按Esc键退出编辑模式,然后Shift+;,然后输入cd,然后输入文件夹开头字符,然后按Tab键智能提示。
3.5刷新配置:
         source /etc/profile
3.6检验配置成功:
         回到根目录:cd     验证:java

4.安装Hadoop
     4.1 上传:
          在SecureCRT中按 Alt +p,打开SFTP窗口,然后输入命令:put {文件路径/文件名}
     4.2 解压:
          tar -zxvf {文件名} -C app/
     4.3 修改Hadoop的配置
       进入 /home/hadoop/app/hadoop-2.4.1/etc/hadoop。
       修改下面的几个文件:
                  第一个:hadoop-env.sh(环境变量)
位置 : # The java implementation to use. 下面已经有一个缺省的JAVA_HOME变量
                             修改: export JAVA_HOME=/{JDK路径}/java/jdk1.6.0_45
                             如果不记得JDK的路径了,在SecureCRT的session tab上右键,选择克隆一个session,输入echo $JAVA_HOME,就可以查出来了,然后鼠标选中,转到原来的session tab 右键就可以复制了
第二个:core-site.xml(启动时需要读这个配置文件)
<configuration>
<!-- 指定HDFS的namenode的通信地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://{主机名}:9000/</value>
</property>
<!-- 指定hadoop运行时产生文件的存放目录, 如果不记得路径了,输入pwd可以查看完整路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/app/hadoop-2.4.1/data/</value>
</property>
</configuration>
第三个:hdfs-site.xml (启动时需要读这个配置文件)
<configuration>
<!-- 配置HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
第四个:mapred-site.xml (启动时需要读这个配置文件)(需要改文件名,mapred-site.xml 原始名加了template,需要去掉,如果不去掉,hadoop将不会读取。命令:mv mapred-site.xml.template mapred-site.xml)
<configuration>
<!-- 指定你的mapreduce程序,应该放到哪个资源调度集群上面去跑。资源调度负责把你的程序的jar,分发,分配给你运行的虚拟机。如果不指定为yarn,则程序只会在本地跑,那么将变成单机版程序,则变得无意义 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>          
                     第五个:yarn-site.xml (启动时需要读这个配置文件)
<configuration>
<!-- 指定yarn的老大resourcemanager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>{主机名}</value>
</property>
<!--reduce获取数据的方式, map出的中间结果怎么传递给reduce,采用哪种机制传,目前只有shuffle这种机制 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>          
                   第6个:slaves(datanode的hostname)
                             cd /home/hadoop/app/hadoop-2.4.1/etc/hadoop
                             vi slaves

4.4 将hadoop添加到环境变量
vim /etc/profile
export JAVA_HOME= /home/hadoop/app /jdk1.7.0_65
export HADOOP_HOME= /home/hadoop/app/hadoop-2.4.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin :$HADOOP_HOME/sbin
source /etc/profile
4.5 格式化HDFS
hadoop namenode -format
         验证:l og的倒数第5行: Storage directory /tmp/hadoop-hadoop/dfs/name has been successfully formatted.                 
                                文件夹  /home/hadoop/app/hadoop-2.4.1/data/dfs/name/current 将生成,并且包含如下文件(name 文件夹就是namenode,namenode将去读这个name文件夹):
                                      
文件名描述
 fsimage_0000000000000000000
fsimage就是“元数据”:hdfs里面的某一个目录,某一个文件对应的有哪些切块,那些切块分别存放在哪些datanode主机上面?这些东西就是元数据,namenode管理着这些信息,namenode将这些信息就存在namenode自己运行的那台主机的data/dfs/name/current文件夹下面的这个fsimage文件里面。
fsimage_0000000000000000000.md5

seen_txid

VERSION

                                                                                            
4.6 启动hadoop
    (进入sbin文件夹,如果你已经将sbin加入到了环境变量,则可以不用进去)
    不用启动 start-all.sh,因为all太大了
     我们可以只需要启动dfsyarn就可以:
    4.6.1 启动dfs(可以修改slaves文件来指定datanode的地址):
          4.6.1.1 启动namenode,登录到namenode的主机(这里我们是伪分布式,所以它会登陆自己)去启动namenode。 由于namenode是在配置文件里面配置的,所以程序自己namenode主机的地址。
           4.6.1. 2 启动datanode,(Q: 我们没有在配置文件里面配置datanode主机的地址,它是怎么知道地址的呢?A:在 /home/hadoop/app/hadoop-2.4.1/etc/hadoop /salves文件中定义了需要启动datanode的hostname,默认为localhost,我们可以将其改成真实的hostname,当有多台机器时,可以配置多个hostname
           4.6.1. 3 启动second namenode

    4.6.2 启动yarn
         4.6.2.1 启动daemons
         启动resourcemanager
         启动nodemanager(读取salves文件里面的hostname 列表去登陆host,然后启动每一个host上面的nodemanager,这样的启动有个好处就是,只要在一个主机配置好了机群里面的机器,就可以通过ss登陆去启动集群里面的机器上的进程,不必再去一个一个的登陆host再启动,但是这种方式也有一个缺点,那就是你得不断的输入密码,如果集群里面有大量的机器,那么这样手动的输入密码不但麻烦,而且如果程序等不及,有可能已经timeout了,集群将不能协作了)。

4.7 验证集群是否启动成功
用jps命令查看进程(不包括jps应该有5个):
NameNode
SecondaryNameNode
DataNode
JobTracker
TaskTracker
还可以通过浏览器的方式验证
http://192.168.1.110:50070 (hdfs管理界面)
http://192.168.1.110:50030 (mr管理界面)
在这个文件中添加linux主机名和IP的映射关系
C:\Windows\System32\drivers\etc
3.配置ssh免登陆
生成ssh免登陆密钥
ssh-keygen -t rsa
执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免登陆的机器上
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    
虚拟机的虚拟网络图.png


=======================hdfs和mapreduce测试=======================
hadoop内置了一个jetty 的文本容器,所以有个web 服务可供我们访问。
1. 在本地访问hadoop的web服务
    1.1 配置window的hosts( C:\Windows\System32\drivers\etc
         1.1.1 加入{ip} {hostname}。例如:192.168.2.100 hadoop-0
    1.2 访问http://{hostname}:50070
    1.3 上传文件:hadoop fs -put {file name} hdfs://hadoop-0:9000/
      1.4 下载文件:hadoop fs -get hdfs://hadoop-0:9000/ {file name}      
    1.5 运行demo程序:
            cd /home/hadoop/app/hadoop-2.4.1/share/hadoop/mapreduce
           hadoop jar hadoop-mapreduce-examples-2.4.1.jar pi 5 5
=======================hdfs实现机制=======================

1.hdfs是通过分布式集群来储存文件,不过hadoop为使用者提供了一个便捷的虚拟目录,即: hdfs://{host name}:9000/ ,客户端只需要访问这个虚拟目录就可以访问文件了,不需要知道文件的block文件具体存放在哪里。这些查数据和拿数据的工作,已经被hadoop封装好了
2.文件存储到hdfs集群中时会切成小块(block)存放到若干个datanode节点上
3.hdfs文件系统中的文件与真实的block文件之间的映射关系由namenode管理
4.每个block在集群中会存储多个副本,这样可以提高数据的可靠性和访问的吞吐量






















转载于:https://www.cnblogs.com/tonyzeng/p/7596630.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值