centos7 安装hadoop2.7.3遇到的各种问题
解决方案:在hadoop-env.sh中添加如下语句:
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native -Djava.net.preferIPv4Stack=true"
解决方案:执行以下语句
schematool -dbType derby -initSchema
解决方案:
cd /usr/local/hive/scripts/metastore/upgrade/derby
vi hive-schema-2.3.0.derby.sql
将NUCLEUS_ASCII函数的定义注释掉或删除。
1.namenode没有启动
解决方案:格式化namenode
hdfs namenode -format
此时向HDFS拷贝文件发现出现如下错误:
hdfs dfs -mkdir -p /user/linyimin/input
hdfs dfs -copyFromLocal /usr/local/hadoop/etc/hadoop/*xml /user/linyimin/input
再次运行jps发现,datanode没有启动。
经过查询资料发现:
当我们使用hdfs namenode -format格式化namenode时,会在namenode数据文件夹(这个文件夹为自己配置文件hdfs-site.xml中dfs.namenode.name.dir的路径)中保存一个current/VERSION文件,记录clusterID,datanode数据文件夹(这个文件夹为自己配置文件中dfs.dataNode.name.dir的路径)中保存的current/VERSION文件中的clustreID的值是第一次格式化保存的clusterID,这样,datanode和namenode之间的ID不一致
所以,在格式化之前先删除 dfs.name.dir指定目录下的所有文件(注意删目录下所有的文件及文件夹而不是删除该目录)
hdfs namenode -format
start-all.sh
jps
此时,拷贝文件成功。运行hadoop下自带的例子,也能成功运行:
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /user/linyimin/input output
2.hive查询触发mapreduce任务出现异常
Exception in thread "main" java.lang.OutOfMemoryError: PermGen space
原因:客户端内存不足
解决方案适当添加内存
export HADOOP_CLIENT_OPTS="-XX:MaxPermSize=128M $HADOOP_CLIENT_OPTS"
有一个问题没有想明白:
在hadoop-env.sh文件中添加了如下语句:
export HADOOP_CLIENT_OPTS="-XX:MaxPermSize=1024M $HADOOP_CLIENT_OPTS"
但是没有起作用。
3.hive启动出现异常
Cannot create directory /user/hive/tmp/root/c819e539-1995-448f-89a8-fb72bf93976e. Name node is in safe mode.
原因:Name node is in safe mode.这是因为在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。
解决方案:
- 只需要等待一会儿安全模式结束即可 。
- 使用命令手动离开安全模式
hdfs dfsadmin -safemode leave
用户可以通过 hdfs dfsadmin -safemode value 来操作安全模式,参数value的说明如下:
enter - 进入安全模式
leave - 强制NameNode离开安全模式
get - 返回安全模式是否开启的信息
wait - 等待,一直到安全模式结束。
beeline下执行命令出现下列异常:
Error: org.apache.hive.service.cli.HiveSQLException: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. Permission denied: user=hive, access=EXECUTE, inode="/tmp/hadoop-yarn/staging/hive/.staging":root:supergroup:drwx------
解决方案:将HDFS上的文件夹/tmp设为其他用户可读
hdfs dfs -chmod -R 744 /tmp
hive创建数据库出现如下异常
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:javax.jdo.JDODataStoreException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT' at line 1
经过查阅资料了解到mysql通过jdbc链接的时候会进行测试’SET OPTION SQL_SELECT_LIMIT=DEFAULT’,但是5.6以后的版本弃用了set的方式。我用的数据库版本是5.6但是用的驱动版本是mysql-connector-java-5.1.17.jar。所以需要下载新版本的驱动,将mysql-connector-java-5.1.17.jar替换成mysql-connector-java-5.1.43.jar,上述问题即可解决。
上一篇: python基础学习之空气质量可视化(六)数据可视化
下一篇: 数据可视化:使用API
推荐阅读