hadoop伪分布式的环境搭建

                                                                                      hadoop伪分布式的环境搭建

1. 完成Centos6.4安装

2.ifconfig -a 查看Linux本机的ip地址。在新安装的Centos6.4 Linux系统,需要配置手动配置本机的IP地址。步骤如下:

   1.使用命令:vi /etc/sysconfig/network-scripts/ifcfg-eth0 编辑该文件,添加量如下图:


在使用root用户登录的前提下使用命令:service network restart 重置系统的网络配置。

使用命令:hostname 查看当前主机的名称。

使用命令:vi /etc/sysconfig/network 编辑该文件修改主机名 

使用命令:vi /etc/hosts  编辑该文件,在该文件中添加:192.168.80.100(本机的IP地址),hadoop(主机名)

注意事项:此处的GATEWAY(网关)不是随意填写的,而是你的Windows的iPV4的地址,真是存在的。如果该处填写错误则会是我们接下来的两个工具软件无法使用。

以上对于网络的配置结束。

2.防火墙的设置

使用命令:service iptables status  ---查看当前本机的防火墙的状态

使用命令:service iptables stop  ---关闭防火墙

使用命令:chkconfig iptables --list  ---查看防火墙开机启动的状态

使用命令:chkconfig iptables off  ---关闭防火墙开机启动

3.重启本机

使用命令:reboot

4.下载工具软件WinSCP、PieTTY 。WinSCP是连接Linux系统与Windows系统的工具,可以非常方便在两者之间传输文件。PieTTY是方便我们写shell脚本,两者都需要设置ssh无密码登陆。

5.在完成工具软件的安装后,进入ssh的无密码登陆。

使用命令: cd ~/.ssh 

输入命令:ssh-keygen -t rsa 生成秘钥命令

输入命令:ssh-copy-id localhost 将公钥拷贝到机器上

到此处ssh无密码登陆已经设置完成。

校验:

输入命令:ssh localhost

可以查看到last login。。。。。等信息

输入命令:exit 

可以看到退出等信息。

对于此处的设置,初学者可能不太明白,其实我也不太明白,只是配置好多次以后就会比以前更加的深刻,慢慢就会理解,所以第一次配置不要太深究为什么。

6.使用WinSCP工具软件连接Linux系统。

单击打开该软件,填写操作如下图:注意不需要填写秘钥文件那栏,填写好其他文件后会有对应的提示。当时我就为秘钥这栏停留了好大一会。


在网络设置没有问题的IP地址、网关的正确配置的情况下会连接成功的。

连接成功后,可以将要安装的JDK、hadoop的压缩包直接拖到Linux端即可。

7、安装JDK,此处以为很简单的事情,但是遇到一些没想到的错误。

注意事项:

报错:

  1. Error: unpack could not create JAR file:  

7.1.对于系统自带的JDK的清除。

 输入命令:rpm -qa | grep java

 输入命令:rpm -qa | grep jdk

 输入命令:rpm -qa | grep jre

以上命令是查找出自带的或之前安装的jdk。

输入命令:rpm -e xxx   删除用上述命令查找出的文件

7.2.注意安装的jdk的版本与Linux的版本兼容性问题。

我当时已经清除了之前安装的、自带的JDK版本但是还是安装不成功,又折腾一会发现还是安装不成功。在注意到版本后,

输入命令: file /bin/ls 查看Centos是64位、32位的

选择对应版本的JDK,此处选择的是:jdk-6u45-linux-x64.bin(版本略老点,但是还不影响开发)

对于该文件先修改其权限:

输入命令:chmod u+x jdk-6u45-linux-x64.bin 设置该命令为可执行文件

在当前文件夹下输入命令:./jdk-6u45-linux-x64.bin  安装该文件

当出现DONE时,表示jdk安装成功。

配置环境变量:

输入命令:vi /etc/profile

export JAVA_HOME=/usr/myapp/jdk
export PATH=.:$JAVA_HOME/bin:$PATH

重启主机或使用命令:source /etc/profile 刷新配置

这里我又出现了错误,是Centos的错误source /etc/profile 命令执行不成功。尝试了修改PATH路径不成功,但是对于网上现在给出大数都是这种改法:

输入命令:vi ~/.bash_profile 

将相关的bin、sbin目录添加即可。此处将这种方法推荐一下。我并没有成功。

我是用重启主机后,执行java -version 

可以查看到jdk的版本。说明jdk安装成功。

8.安装hadoop2.4.1

这个安装很简单,用WinSCP将hadoop-2.4.1.tar.gz拷贝到Linux系统中,

输入命令:tar -vxzf hadoop-2.4.1.tar.gz 就可以了。

9.添加hadoop的环境变量:

export HADOOP_HOME=/usr/myapp/hadoop-2.4.1
export PATH=.:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

10.配置、修改hadoop的文件。

   10.1修改文件hadoop-evn.sh

    修改JAVA_HOME 的值:

     vi hadoop-env.sh

    修改内容如下:

    export JAVA_HOME=/usr/myapp/jdk

   10.2修改文件core-site.xml文件:

<!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/myapp/hadoop-2.4.1/tmp</value>
 </property>

 10.3配置hdfs-site.xml文件

  <property>
     <name>dfs.replication</name>
     <value>1</value>
 </property>

 10.4配置文件mapred-site.xml 
mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml

<!-- 指定mr运行在yarn上 -->
<property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value>
</property>
10.5配置文件yarn-site.xml
<property>
      <name>yarn.resourcemanager.hostname</name>
     <value>hadoop</value>
</property>
<!-- reducer获取数据的方式 -->
<property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
</property>

在以上文件配置好后,可以重启本机.

11.启动hadoop

输入命令:hadoop namenode -format   格式化namenode

重启后输入命令:start-dfs.sh   启动hdfs

可以输入命令:jps   查看进程,会发现NameNode、dataNode、SecondaryNameNodeq会被陆续启动。这也是验证hadoop伪分布式集群是否搭建成功的方法。


********************以下是我在后续的搭建环境中遇到的问题***********************************

1.CentOS安装时在WIN8系统下会有物理内存不足的提示,我的解决办法是将其内存调的小一点就可以继续安装。

2.CetOS与宿主机的网络不通,我的宿主机(电脑)刚从WIN7换到WIN8的系统,对于其网络的设置遇到些问题,采用了最为粗暴简单的方式,直接放弃虚拟机,从新安装虚拟机,另外还有一种方式是从网上找的将SELinux关闭的方式完成网络的通信。

3.对于Linux下的网络设置也是采用了不同的方式,选取了使用linux的界面操作,而不是通过shell操作的,如下图:





   Hbase启动时,发现有些节点没有启动,但是zookeeper是启动的可能原因是myid 文件没有创建,还有可能是在regionservers文件没有注明节点。

再次搭环境遇到的问题:

输入命令:start-dfs.sh

now.: ssh: Could not resolve hostname now.: Name or service not known
guard.: ssh: Could not resolve hostname guard.: Name or service not known
noexecstack'.: ssh: Could not resolve hostname noexecstack'.: Name or service not known
loaded: ssh: Could not resolve hostname loaded: Name or service not known
have: ssh: Could not resolve hostname have: Name or service not known
library: ssh: Could not resolve hostname library: Name or service not known
might: ssh: Could not resolve hostname might: Name or service not known
VM: ssh: Could not resolve hostname vm: Name or service not known
Server: ssh: Could not resolve hostname server: Name or service not known
disabled: ssh: Could not resolve hostname disabled: Name or service not known
stack: ssh: Could not resolve hostname stack: Name or service not known
which: ssh: Could not resolve hostname which: Name or service not known
Java: ssh: Could not resolve hostname java: No address associated with hostname
64-Bit: ssh: Could not resolve hostname 64-bit: Name or service not known
The authenticity of host 'you (127.0.53.53)' can't be established.
ECDSA key fingerprint is 11:37:4a:21:d7:6e:c4:b7:db:50:f7:85:d8:30:91:d0.
Are you sure you want to continue connecting (yes/no)? fix: ssh: Could not resolve hostname fix: Name or service not known
the: ssh: Could not resolve hostname the: Name or service not known
stack: ssh: Could not resolve hostname stack: Name or service not known
that: ssh: Could not resolve hostname that: Name or service not known
VM: ssh: Could not resolve hostname vm: Name or service not known
The: ssh: Could not resolve hostname the: Name or service not known
library: ssh: Could not resolve hostname library: Name or service not known
guard: ssh: Could not resolve hostname guard: Name or service not known
fix: ssh: Could not resolve hostname fix: Name or service not known
recommended: ssh: Could not resolve hostname recommended: Name or service not known

解决方法是:

在/etc/profile 文件中加入

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native   HADOOP_INSTALL------是hadoop的解压目录
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"

问题二:


hbase(main):001:0> list
TABLE                                                                                                                                       
\SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/root/myapp/hbase/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/root/myapp/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
2016-08-16 10:07:45,293 WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

ERROR: Can't get master address from ZooKeeper; znode data == null

Here is some help for this command:
List all tables in hbase. Optional regular expression parameter could
be used to filter the output. Examples:

  hbase> list
  hbase> list 'abc.*'
  hbase> list 'ns:abc.*'
  hbase> list 'ns:.*'


解决方法是:这是因为zookeeper是路由Hbase的关键,zookeeper没有完成该功能

1.regionservers 没有指定相应的id

2.myid文件没有写zookeeper对应的id

3.没有在zoo.cfg文件内指定zookeeper的存放数据文件


问题三:项目部署到Linux上之后访问接口,报错如下:


2016-08-17 17:29:16.367  INFO 10376 --- [al-4T-452:2181)] org.apache.zookeeper.ClientCnxn          : Session establishment complete on server DSJ-signal-4T-452/10.162.1.232:2181, sessionid = 0x256912147ce004a, negotiated timeout = 900000
2016-08-17 17:29:16.723 ERROR 10376 --- [nio-8081-exec-1] : org.apache.hadoop.hbase.security.AccessDeniedException: Insufficient permissions (table=current_position, action=READ)
    at org.apache.hadoop.hbase.security.access.AccessController.internalPreRead(AccessController.java:1408)
    at org.apache.hadoop.hbase.security.access.AccessController.preGetOp(AccessController.java:1416)
    at org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.preGet(RegionCoprocessorHost.java:999)
    at org.apache.hadoop.hbase.regionserver.HRegion.get(HRegion.java:4746)
    at org.apache.hadoop.hbase.regionserver.HRegion.get(HRegion.java:4730)
    at org.apache.hadoop.hbase.regionserver.HRegionServer.get(HRegionServer.java:2848)
    at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:29493)
    at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2035)
    at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:98)
    at org.apache.hadoop.hbase.ipc.SimpleRpcScheduler.consumerLoop(SimpleRpcScheduler.java:160)
    at org.apache.hadoop.hbase.ipc.SimpleRpcScheduler.access$000(SimpleRpcScheduler.java:38)
    at org.apache.hadoop.hbase.ipc.SimpleRpcScheduler$1.run(SimpleRpcScheduler.java:110)
    at java.lang.Thread.run(Thread.java:745)


看到是一个关于权限访问的问题,看到这异常意识到对于HBase自身而言是没有用户权限的设置,所以通过与运维人员沟通之后才知道是Linux系统自身的用户权限的设置问题。

 解决方法是:检查部署的项目Linux用户权限级别

*****************************************2016.9.15再次安装Hadoop****************************************

org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /myapp/hadoop/tmp/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
    at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverStorageDirs(FSImage.java:298)
    at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:202)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:891)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:638)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:503)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:559)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:724)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:708)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1358)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1424)
2016-09-15 18:50:34,547 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1
原因:hadoop namenode -format  命令输入错误

我输入的是:hadoop namenode -formate 导致tmp文件夹没有生成成功

错误很弱智,找了一个小时,反复验证,最终找到是命令输入的错误了,不过在这里应当说明的是tmp文件是在hadoop namenode -format 与 start-dfs.sh 相关的,在start-dfs.sh命令输入后会看到文件夹的生成。


java.net.ConnectException: Call From hadoop04/192.168.93.131 to hadoop04:8020 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:783)
    at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:730)
    at org.apache.hadoop.ipc.Client.call(Client.java:1351)
    at org.apache.hadoop.ipc.Client.call(Client.java:1300)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:206)
    at com.sun.proxy.$Proxy10.setSafeMode(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:186)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)
    at com.sun.proxy.$Proxy10.setSafeMode(Unknown Source)
    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.setSafeMode(ClientNamenodeProtocolTranslatorPB.java:561)
    at org.apache.hadoop.hdfs.DFSClient.setSafeMode(DFSClient.java:2146)
    at org.apache.hadoop.hdfs.DistributedFileSystem.setSafeMode(DistributedFileSystem.java:983)
    at org.apache.hadoop.hdfs.DistributedFileSystem.setSafeMode(DistributedFileSystem.java:967)
    at org.apache.hadoop.hbase.util.FSUtils.isInSafeMode(FSUtils.java:462)
    at org.apache.hadoop.hbase.util.FSUtils.waitOnSafeMode(FSUtils.java:910)
    at org.apache.hadoop.hbase.master.MasterFileSystem.checkRootDir(MasterFileSystem.java:442)
    at org.apache.hadoop.hbase.master.MasterFileSystem.createInitialFileSystemLayout(MasterFileSystem.java:153)
    at org.apache.hadoop.hbase.master.MasterFileSystem.<init>(MasterFileSystem.java:129)
    at org.apache.hadoop.hbase.master.HMaster.finishInitialization(HMaster.java:880)
    at org.apache.hadoop.hbase.master.HMaster.run(HMaster.java:683)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: 拒绝连接
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:739)
    at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
    at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:529)
    at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:493)
    at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:547)
    at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:642)
    at org.apache.hadoop.ipc.Client$Connection.access$2600(Client.java:314)
    at org.apache.hadoop.ipc.Client.getConnection(Client.java:1399)
    at org.apache.hadoop.ipc.Client.call(Client.java:1318)
    ... 22 more

这个错误是由于

 <property>
                <name>hbase.rootdir</name>
                <value>hdfs://hadoop04:9000/hbase</value>
        </property>
没有写端口号,默认连接的端口号是8020端口,找了好长时间才找到的,所以才会发现是HMaster一闪而过,日志文件中的报错如上。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值