hadoop 小问题环境设置

1 linux修改系统日期与时间

 date -s  "2012-11-03 10:25:25"

2 windows下 hadoop 8088 端口不能看log的问题

进入C:\Windows\System32\drivers\etc 目录下编辑hosts目录
同一个地址可以起两个别名,但是不能写两个同样的IP地址
配置成功后可以在cmd中直接ping master…

192.168.137.121 master master
192.168.137.122 slaver1 slaver1
192.168.137.123 slaver2 slaver2
192.168.137.127 slaver3  slaver3

3 windows下 hadoop 8088 端口不能看history日志文件的问题

[root@master sbin]# pwd
/usr/hadoop-2.6.4/sbin
[root@master sbin]# mr-jobhistory-daemon.sh  start historyserver
[root@master sbin]# jps
3849 NameNode
4172 ResourceManager
4029 SecondaryNameNode
5427 Jps
5357 JobHistoryServer

4 windows下 ping命令不是内部命令,系统环境变量Path需添加

C:\windows\system32\

5 开机自启动或者关闭服务(开机关闭防火墙)

chkconfig iptables off

6 查看系统服务命令

 ls -a /etc/init.d/ 

7 杀掉进程,hiveserver2 启动两次会导致beenline

jps
kill -9 6829
kill -l

8 hive2.1.1版本或者之上需要使用jdk1.8或之上的版本进行兼容,否则会造成运行hql是经常报outofmemory错误

9 hbase 查操作命令

启动hbase:hbase shell

help 'create'
help 'put'
help 'get'
help 'alter'

10 安装phoneix 运行sqlline.py master,slaver1,slave2:2181 报错 : No module named argparse

Traceback (most recent call last):
  File "/usr/tools/apache-phoenix-4.11.0-HBase-1.2-bin/bin/sqlline.py", line 27, in <module>
    import argparse
ImportError: No module named argparse

这是因为安装新版本的phoenix自带sqlline需要argparse模块,我们centos6.5 中的python不包括这个模块。需要额外安装,我们使用easy_install 工具安装argparse模块比较简洁,类似npm

#wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py
#python ez_setup.py
#easy_install argparse

11 scala project with maven

Creating Your First scala Project with maven
如下图 add aracheType Choose net.alchim31.maven:scala-archetype-simple version:1.5
填好gav自动下载

《hadoop 小问题环境设置》 enter description here

修改scala版本号

 <properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
    <encoding>UTF-8</encoding>
    <scala.tools.version>2.11</scala.tools.version>
    <scala.version>2.11.11</scala.version>
  </properties>

删除不用的单元测试依赖

    <dependency>
      <groupId>org.specs2</groupId>
      <artifactId>specs2_${scala.tools.version}</artifactId>
      <version>1.13</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.scalatest</groupId>
      <artifactId>scalatest_${scala.tools.version}</artifactId>
      <version>2.0.M6-SNAP8</version>
      <scope>test</scope>
    </dependency>

删除插件编译参数

<arg>-make:transitive</arg>

《hadoop 小问题环境设置》 enter description here

12 spark-shell 的使用

spark-shell 是一个命令行交互工具(需要安装好spark环境),在里面可以快速查看处理结果,下面有一个需求就查询ID为10的同学的信息

  
[root@master Desktop]# cat student.txt 
01      赵小六  1990-09-01 03:18:03.0   男
02      钱钟书  1916-12-21 00:00:00.0   男
03      孙菲菲  1990-05-20 00:00:00.0   男
04      李彦伟  1990-08-06 00:00:00.0   男
05      周佛海  1900-12-01 00:00:00.0   女
06      吴天    1992-03-01 00:00:00.0   女
07      郑板桥  1989-07-01 00:00:00.0   女
08      王菊    1990-01-20 00:00:00.0   女
09      张凯    1983-08-01 20:10:21.0   男
10      李云    1989-05-19 11:07:30.0   男
11      张凯    1997-06-12 11:47:23.0   男
12      张凯    1997-06-16 11:47:23.0   女
13      张海洋  1989-05-14 11:07:30.0   男

进入环境

[root@master ~]# spark-shell

生成rdd

scala> val sturdd =sc.textFile("file:///root/Desktop/student.txt")

过滤

scala> sturdd.filter(x=>x.split("\t")(0).toString.equals("10")).foreach(println)
10      李云    1989-05-19 11:07:30.0   男

13【hadoop】 running beyond virtual memory错误原因及解决办法

问题描述:

在hadoop中运行应用,出现了running beyond virtual memory错误。提示如下:

Container [pid=28920,containerID=container_1389136889967_0001_01_000121] is running beyond virtual memory limits. Current usage: 1.2 GB of 1 GB physical memory used; 2.2 GB of 2.1 GB virtual memory used. Killing container.

原因:从机上运行的Container试图使用过多的内存,而被NodeManager kill掉了。

[摘录] The NodeManager is killing your container. It sounds like you are trying to use hadoop streaming which is running as a child process of the map-reduce task. The NodeManager monitors the entire process tree of the task and if it eats up more memory than the maximum set in mapreduce.map.memory.mb or mapreduce.reduce.memory.mb respectively, we would expect the Nodemanager to kill the task, otherwise your task is stealing memory belonging to other containers, which you don't want.

解决方法:
mapred-site.xml中设置map和reduce任务的内存配置如下:(value中实际配置的内存需要根据自己机器内存大小及应用情况进行修改)

<property>
  <name>mapreduce.map.memory.mb</name>
  <value>1536</value>
</property>
<property>
  <name>mapreduce.map.java.opts</name>
  <value>-Xmx1024M</value>
</property>
<property>
  <name>mapreduce.reduce.memory.mb</name>
  <value>3072</value>
</property>
<property>
  <name>mapreduce.reduce.java.opts</name>
  <value>-Xmx2560M</value>
</property>

如果你没有权限重启hadoop可以在运行MR的时候设置configuration

conf.set("mapreduce.map.memory.mb", "1536");
conf.set("mapreduce.reduce.memory.mb", "3072");
conf.set("mapreduce.map.java.opts", "-Xmx1024m");
conf.set("mapreduce.reduce.java.opts", "-Xmx2560m");

附录:
Container is running beyond memory limits

14 Out of memory error in Mapreduce shuffle phase

必须满足条件 percent * parallelcopies <= 1 ,下面的设置将会报错

mapreduce.reduce.shuffle.input.buffer.percent = 0.7
mapreduce.reduce.shuffle.memory.limit.percent = 0.25
mapreduce.reduce.shuffle.parallelcopies = 5

相关链接

15 eclipse 链接 hbase 查询数据卡死

卡死的位置如下所示,断点调试是发现数据是卡死在Result result = table.get(get);最终发现是windows上的hosts配置需要跟大数据环境的hosts配置相一致,否则就会导致无法查询,一直在连接,从来啊没有连接上
,连接上会有一个Connecting to slaver2/192.168.137.120:16020 …的提示

2017-11-16 18:40:02.008 [INFO ] [org.apache.zookeeper.Environment.logEnv(Environment.java:100)] Client environment:java.io.tmpdir=C:\Users\ZHAOZH~1\AppData\Local\Temp\
2017-11-16 18:40:02.008 [INFO ] [org.apache.zookeeper.Environment.logEnv(Environment.java:100)] Client environment:java.compiler=<NA>
2017-11-16 18:40:02.008 [INFO ] [org.apache.zookeeper.Environment.logEnv(Environment.java:100)] Client environment:os.name=Windows 10
2017-11-16 18:40:02.008 [INFO ] [org.apache.zookeeper.Environment.logEnv(Environment.java:100)] Client environment:os.arch=amd64
2017-11-16 18:40:02.008 [INFO ] [org.apache.zookeeper.Environment.logEnv(Environment.java:100)] Client environment:os.version=10.0
2017-11-16 18:40:02.009 [INFO ] [org.apache.zookeeper.Environment.logEnv(Environment.java:100)] Client environment:user.name=zhaozhifei
2017-11-16 18:40:02.011 [INFO ] [org.apache.zookeeper.Environment.logEnv(Environment.java:100)] Client environment:user.home=C:\Users\zhaozhifei
2017-11-16 18:40:02.011 [INFO ] [org.apache.zookeeper.Environment.logEnv(Environment.java:100)] Client environment:user.dir=E:\MyWorkSpace\hadoopProjects\hbaseapi
2017-11-16 18:40:02.012 [INFO ] [org.apache.zookeeper.ZooKeeper.<init>(ZooKeeper.java:438)] Initiating client connection, connectString=192.168.137.118:2181,192.168.137.119:2181,192.168.137.120:2181 sessionTimeout=90000 watcher=hconnection-0x4387b79e0x0, quorum=192.168.137.118:2181,192.168.137.119:2181,192.168.137.120:2181, baseZNode=/hbase
2017-11-16 18:40:02.014 [DEBUG] [org.apache.zookeeper.ClientCnxn.<clinit>(ClientCnxn.java:102)] zookeeper.disableAutoWatchReset is false

《hadoop 小问题环境设置》 enter description here

参考

HBase读取数据卡住长时间不返回的原因分析

16 CentOS 7 防火墙设置

查看防火墙状态

$ systemctl status firewalld
$ service firewalld status

关闭防火墙

$ sudo systemctl stop firewalld
$ sudo service firewalld stop
Redirecting to /bin/systemctl stop  firewalld.service

启用防火墙

$ sudo systemctl start firewalld
$ sudo service firewalld start
Redirecting to /bin/systemctl start  firewalld.service

开机启用防火墙

$ sudo systemctl enable firewalld
开机不启用防火墙

$ sudo systemctl disable firewalld

对外开启 80、8080 端口: 只有开启防火墙才可以设置

firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=8080/tcp

How to Stop and Disable Firewalld on CentOS 7
How to Start and Enable Firewalld on CentOS 7
How To: Disable Firewall on RHEL / CentOS / RedHat Linux

17 window上编写的shell脚本,linux无法执行的问题

关于回车与换行的由来
很久以前,老式的电传打字机使用两个字符来另起新行。一个字符把滑动架移回首位 (称为回车,ASCII码为0D),另一个字符把纸上移一行 (称为换行,ASCII码为0A)。当计算机问世以后,存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行尾。UNIX 开发者决定他们可以用一个字符来表示行尾,Linux沿袭Unix,也是。Apple 开发者规定了用.开发 MS-DOS以及Windows 的那些家伙则决定沿用老式的.

三种行尾格式如下:
unix : n
dos : rn
mac : r

这意味着,如果你试图把一个文件从一种系统移到另一种系统,那么你就有换行符方面的麻烦。
因为MS-DOS及Windows是回车+换行来表示换行,因此在Linux下用Vim查看在Windows下写的代码,行尾后^M符号。详见Windows & Linux 文件格式之迷 < VI下删除文本中的^M>

解决方法

  • vim -b filename 这样就能看到行尾的^M符号了,然后移动到行尾
  • 在vim中利用替换功能就可以将^M都删掉,键入如下替换命令行:%s/^M//g
  • 注意:上述命令行中的^M符,不是^再加上M,而是由Ctrl+vCtrl+M键生成的,或者Ctrl+v,再按回车

18 关于本地代码调试服务无法连接的问题

如果想在本地运行则必须设置bootstrap.serverskafka集群设置的地址是相同的,即iphostname 不能完全等价,win host要进行配置,目前发现hbase,测试环境ok,线上集群报错,等问题,均由此问题导致。特此铭记

19 hdfs块丢失导致的异常问题排查解决

问题描述:由于不小心误删了hdfs的元数据目录,导致hdfs的块丢失;hdfs namenode自动进入 safe mode,hbase也一直报错找不到hbase.version文件,导致master挂掉;

  • 首先退出hdfs namenode safe modehadoop dfsadmin -safemode leave

  • 修复hdfs丢失的块 hadoop fsck /hdfs fsck / -delete //此方式会将丢失的块全部删除

  • hbase修复 hbase hbck -fixVersionFile

如果hbase还有org.apache.hadoop.hbase.TableExistsException: hbase:namespace 异常
解决方案:

  • 切换到zookeeper的bin目录;

  • 执行$sh zkCli.sh

  • 输入 ls /

  • 输入rmr /hbase

  • 退出重启即可

引用自

    原文作者:天堂宝宝_V
    原文地址: https://www.jianshu.com/p/64dcffe5d15e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞