最近我们用CDH 5升级到了YARN.
(版本:2.3.0 cdh5.1.3,r8e266e052e423af592871e2dfe09d54c03f6a0e8)
我试图通过单击ApplicationMaster上的日志从资源管理器访问失败作业的日志,但我收到以下错误:
container_1412602970010_0037_01_000002重定向失败尝试构建重定向URL到日志服务器时失败.可能未配置Log Server url容器不存在.
同样在pig/mapreduce工作中我们看到以下警告:
信息:2014-10-07 15:42:19,134 [main] WARN org.apache.hadoop.security.UserGroupInformation - PriviledgedActionException as:jobs(auth:SIMPLE)cause:java.io.IOException:org.apache.hadoop.ipc .RemoteException(org.apache.hadoop.yarn.exceptions.YarnRuntimeException):无法加载历史文件hdfs:// prod-hadoop:8020/user/history/done_intermediate/jobs/job_1412706451566_0032-1412710613932-jobs-PigLatin%3Aclk_imp_join_2014%2D10 %2D04T13-1412710831122-14-2连续调-root.jobs-1412710694546.jhist
我在配置中遗漏了什么?
我正在尝试找到登录MapReduce作业的最佳方法.我在其他Java应用程序中使用slf4j和log4j appender,但由于MapReduce作业在集群中以分布式方式运行,我不知道应该在哪里设置日志文件位置,因为它是一个访问受限的共享集群特权.
是否有任何标准做法用于登录MapReduce作业,因此您可以在作业完成后轻松查看群集中的日志?
股票hadoop2.6.0安装给了我no filesystem for scheme: s3n.hadoop-aws.jar现在添加到类路径给了我ClassNotFoundException: org.apache.hadoop.fs.s3a.S3AFileSystem.
我有一个大多数股票安装hadoop-2.6.0.我只设置目录,并设置以下环境变量:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/jre
export HADOOP_COMMON_HOME=/opt/hadoop
export HADOOP_HOME=$HADOOP_COMMON_HOME
export HADOOP_HDFS_HOME=$HADOOP_COMMON_HOME
export HADOOP_MAPRED_HOME=$HADOOP_COMMON_HOME
export HADOOP_OPTS=-XX:-PrintWarnings
export PATH=$PATH:$HADOOP_COMMON_HOME/bin
Run Code Online (Sandbox Code Playgroud)
该hadoop classpath方法是:
/opt/hadoop/etc/hadoop:/opt/hadoop/share/hadoop/common/lib/*:/opt/hadoop/share/hadoop/common/*:/opt/hadoop/share/hadoop/hdfs:/opt/hadoop/share/hadoop/hdfs/lib/*:/opt/hadoop/share/hadoop/hdfs/*:/opt/hadoop/share/hadoop/yarn/lib/*:/opt/hadoop/share/hadoop/yarn/*:/opt/hadoop/share/hadoop/mapreduce/lib/*:/opt/hadoop/share/hadoop/mapreduce/*:/contrib/capacity-scheduler/*.jar:/opt/hadoop/share/hadoop/tools/lib/*
Run Code Online (Sandbox Code Playgroud)
当我试着奔跑时,hadoop distcp -update hdfs:///files/to/backup s3n://${S3KEY}:${S3SECRET}@bucket/files/to/backup我得到了Error: java.io.Exception, no filesystem for scheme: s3n.如果我使用s3a,我会得到同样的错误抱怨s3a.
在互联网告诉我,hadoop-aws.jar是不是默认的类路径的一部分.我添加了以下行/opt/hadoop/etc/hadoop/hadoop-env.sh:
HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_COMMON_HOME/share/hadoop/tools/lib/*
Run Code Online (Sandbox Code Playgroud)
现在hadoop classpath附上以下内容:
:/opt/hadoop/share/hadoop/tools/lib/*
Run Code Online (Sandbox Code Playgroud)
这应该涵盖/opt/hadoop/share/hadoop/tools/lib/hadoop-aws-2.6.0.jar.现在我得到:
Caused by: java.lang.ClassNotFoundException:
Class org.apache.hadoop.fs.s3a.S3AFileSystem not found
Run Code Online (Sandbox Code Playgroud)
jar文件包含无法找到的类:
unzip -l /opt/hadoop/share/hadoop/tools/lib/hadoop-aws-2.6.0.jar |grep S3AFileSystem
28349 2014-11-13 …Run Code Online (Sandbox Code Playgroud) 我在 AWS EC2 虚拟机 (Ubuntu 14.04) 上,愿意在我的 S3 文件中的 RDD 上使用 Spark 做一些基础知识。成功运行此脏命令时(暂时不使用sparkContext.hadoopConfiguration)
scala> val distFile = sc.textFile("s3n://< AWS_ACCESS_KEY_ID>:<AWS_SECRET_ACCESS_KEY>@bucketname/folder1/folder2/file.csv")
Run Code Online (Sandbox Code Playgroud)
然后我在运行时收到以下错误 distFile.count()
java.lang.NoClassDefFoundError: org/jets3t/service/ServiceException
at org.apache.hadoop.fs.s3native.NativeS3FileSystem.createDefaultStore(NativeS3FileSystem.java:334)
at org.apache.hadoop.fs.s3native.NativeS3FileSystem.initialize(NativeS3FileSystem.java:324)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2596)
...
...
Caused by: java.lang.ClassNotFoundException: org.jets3t.service.ServiceException
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
Run Code Online (Sandbox Code Playgroud)
我以前有
export在 .bashrc 中添加了两个键作为环境变量SPARK_HADOOP_VERSION=2.6.0-cdh5.4.1 sbt/sbt assembly它与 的语法有关textFile("s3n// ...")吗?我试过其他人,包括s3://没有成功......
谢谢
根据我对 hadoop 中高可用性的理解,我们需要一个名称节点和一个备用节点、网络共享存储空间(在两个名称节点之间共享)、至少 2 个数据节点来运行 hadoop 集群。
我们可以在运行名称节点的同一台机器上运行 dataNode 服务器吗?
Yarn 可以在运行 NameNode 或 dataNode 服务器的机器上运行吗?
请建议我是否缺少生产 hadoop 环境所需的任何其他服务。
名称节点的系统要求应该是什么,因为它只处理元数据(CPU 密集型的 I/O 密集型)。我们正在处理的数据主要是 I/O 密集型的。
我正在使用hbase的本机API编写Hbase Java客户端.
我可以使用我创建的Hbase客户端连接到hbase并运行各种查询.我使用"hbase classpath"命令运行我的hbase客户端.这解决了所有依赖项.
现在我们希望这个hbase客户端成为项目的一部分,并将其作为其组件之一.因此,在集成之后,我们需要将其作为项目的War文件的一部分运行(我们需要将其作为rest API的一部分运行).我添加了hbase-site.xml.hdfs-site.xml和core-site.xml作为资源,并设置为Resource to configuration object.
Configuration conf = HBaseConfiguration.create()
URL hbaseUrl=HbaseManagerServiceImpl.class.getClassLoader().getResource("hbase-site.xml");
conf.addResource(hbaseUrl.toString());
URL hdfsUrl=HbaseManagerServiceImpl.class.getClassLoader().getResource("hdfs-site.xml");
conf.addResource(hdfsUrl.toString());
URL coreUrl=HbaseManagerServiceImpl.class.getClassLoader().getResource("core-site.xml");
conf.addResource(coreUrl.toString());
Run Code Online (Sandbox Code Playgroud)
当我试图只添加core-site.xml时,我收到错误说"包含失败"哪个文件存在于该主机上,因此在资源较旧时添加了该文件,这解决了我的问题.
HTable table = new HTable(conf , "tableName");
Run Code Online (Sandbox Code Playgroud)
我可以成功扫描并获取行操作并获取结果.
Scan scanTable = new Scan();
Get row = new Get(key);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试做"Result rowData = table.get(row); "
我的代码卡住了,没有显示任何错误.
我可以使用""hbase classpath"命令运行相同的代码.我是否需要设置$ HADOOP_CLASSPATH和$ HBASE_CLASSPATH变量,我通过jetty webserver运行我的代码.
以下是错误跟踪:
java.io.InterruptedIOException: Giving up trying to location region in meta: thread is interrupted.
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:1391)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:1169)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:1123)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getRegionLocation(HConnectionManager.java:964)
at org.apache.hadoop.hbase.client.RegionServerCallable.prepare(RegionServerCallable.java:72)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:113)
at org.apache.hadoop.hbase.client.HTable.get(HTable.java:780)
at …Run Code Online (Sandbox Code Playgroud) 我有一个长期运行的纱线应用程序(不是 m/r),其中的容器偶尔会超过纱线内存限制,此时纱线会杀死有问题的容器。我发现很难确定导致堆增长的原因。我可以设置一个纱线参数来告诉纱线在杀死容器之前进行堆转储吗?
我正在尝试在Spark任务中的DataFrame上执行foreach循环。我使用以下cmd提交我的spark任务。
spark-submit --class Hive_Cis.DataAnalyze --master local --deploy-mode client --executor-memory 1g --name DataAnalyze --conf "spark.app.id=DataAnalyze" Hive_CIS-1.0-SNAPSHOT-jar-with-dependencies.jar
Run Code Online (Sandbox Code Playgroud)
现在,我的类是spark任务的驱动程序,如下所示。
enter public class DataAnalyze {
public static void main(String[] args){
SparkConf conf = new SparkConf().setAppName("DataAnalyze").setMaster("local");
JavaSparkContext sc = new JavaSparkContext(conf);
HiveContext hiveContext = new HiveContext(sc);
DataFrame dataSrcsTable = hiveContext.sql("SELECT * FROM default.data_tables_metrics");
dataSrcsTable.show();
dataSrcsTable.foreach(new DataTableReader(hiveContext));
}//END OF MAIN
Run Code Online (Sandbox Code Playgroud)
那么扩展AbstractFunction1的类是:
public class DataTableReader extends AbstractFunction1 implements Serializable{
private HiveContext hiveConnection;
private static final long serialVersionUID = 1919222653470174456L;
public DataTableReader(HiveContext hiveData){
this.hiveConnection = hiveData;
}
@Override …Run Code Online (Sandbox Code Playgroud) HDFS 客户端位于 HDFS 集群之外。当 HDFS 客户端将文件写入 hadoop 时,HDFS 客户端将文件拆分为块,然后将块写入数据节点。
这里的问题是 HDFS 客户端如何知道 Blocksize ?块大小在 Name 节点中配置,而 HDFS 客户端不知道块大小,那么它将如何将文件拆分为块?
想设置
mapreduce.job.user.name=myuser
Run Code Online (Sandbox Code Playgroud)
试过
spark-submit --class com.MyClass
--conf mapreduce.job.user.name=myuser \
--conf spark.mapreduce.job.user.name=myuser \
--master yarn \
--deploy-mode cluster \
Run Code Online (Sandbox Code Playgroud)
也试过
--conf user.name
Run Code Online (Sandbox Code Playgroud)
在 Spark UI 显示的环境中
user.name yarn
Run Code Online (Sandbox Code Playgroud) hadoop2 ×10
hadoop ×8
apache-spark ×3
java ×3
amazon-s3 ×2
hadoop-yarn ×2
hdfs ×2
amazon-ec2 ×1
cloudera ×1
cloudera-cdh ×1
hbase ×1
heap-dump ×1
hive ×1
mapr ×1
mapreduce ×1