Tag: cloudera

使用MapReduce中的globStatus过滤输入文件

我有很多输入文件,我想根据最后附加的日期处理选定的文件。 我现在很困惑我在哪里使用globStatus方法来过滤掉文件。 我有一个自定义的RecordReader类,我试图在其下一个方法中使用globStatus,但它没有成功。 public boolean next(Text key, Text value) throws IOException { Path filePath = fileSplit.getPath(); if (!processed) { key.set(filePath.getName()); byte[] contents = new byte[(int) fileSplit.getLength()]; value.clear(); FileSystem fs = filePath.getFileSystem(conf); fs.globStatus(new Path(“/*” + date)); FSDataInputStream in = null; try { in = fs.open(filePath); IOUtils.readFully(in, contents, 0, contents.length); value.set(contents, 0, contents.length); } finally { IOUtils.closeStream(in); […]

保存Hadoop中的Mapper输出的位置?

我有兴趣有效地管理Hadoop混洗流量并有效利用网络带宽。 为此,我想知道每个Datanode产生的混乱流量是多少? 洗牌流量只不过是映射器的输出。 那么这个映射器输出保存在哪里? 如何实时获取每个数据节点的映射器输出大小? 感谢您的帮助。 我已经创建了一个目录来存储这个mapper输出,如下所示。 mapred.local.dir /app/hadoop/tmp/myoutput 我看着 hduser@dn4:/app/hadoop/tmp/myoutput$ ls -lrt total 16 drwxr-xr-x 2 hduser hadoop 4096 Dec 12 10:50 tt_log_tmp drwx—— 3 hduser hadoop 4096 Dec 12 10:53 ttprivate drwxr-xr-x 3 hduser hadoop 4096 Dec 12 10:53 taskTracker drwxr-xr-x 4 hduser hadoop 4096 Dec 12 13:25 userlogs 当我运行mapreduce工作时,我无法在这里找到任何东西。 谢谢

连接并坚持使用HBase

我只是尝试使用java客户端连接到hbase,它是cloudera-vm的一部分。 (192.168.56.102是vm的inet ip) 我使用虚拟盒与主机网络设置。 所以我可以访问hbase master的webUI @ http://192.168.56.102:60010/master.jsp 我的java客户端(在vm本身运行良好)也建立了与192.168.56.102:2181的连接 但是当它调用getMaster我得到连接被拒绝时看到log: 11/09/14 11:19:30 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=192.168.56.102:2181 sessionTimeout=180000 watcher=hconnection 11/09/14 11:19:30 INFO zookeeper.ClientCnxn: Opening socket connection to server /192.168.56.102:2181 11/09/14 11:19:30 INFO zookeeper.ClientCnxn: Socket connection established to cloudera-vm/192.168.56.102:2181, initiating session 11/09/14 11:19:30 INFO zookeeper.ClientCnxn: Session establishment complete on server cloudera-vm/192.168.56.102:2181, sessionid = 0x13267157f930009, negotiated […]

在Hadoop中,框架在正常的Map-Reduce应用程序中保存Map任务的输出?

我试图找出Map任务的输出在Reduce任务可以使用之前保存到磁盘的位置。 注意: – 使用的版本是带有新API的Hadoop 0.20.204 例如,在Map类中覆盖map方法时: public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); context.write(word, one); } // code that starts a new Job. } 我有兴趣找出context.write()最终写入数据的位置。 到目前为止,我遇到了: FileOutputFormat.getWorkOutputPath(context); 这给了我在hdfs上的以下位置: hdfs://localhost:9000/tmp/outputs/1/_temporary/_attempt_201112221334_0001_m_000000_0 当我尝试将它用作另一个作业的输入时,它会给我以下错误: org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://localhost:9000/tmp/outputs/1/_temporary/_attempt_201112221334_0001_m_000000_0 […]

使用Java和Kerberos Keytab从Windows访问Cloudera上的HDFS

我正在尝试连接到在Cloudera上运行的HDFS实例。 我的第一步是启用Kerberos并创建Keytabs(如此处所示)。 在下一步中,我想使用keytab进行身份validation。 Configuration conf = new Configuration(); conf.set(“fs.defaultFS”, “hdfs://cloudera:8020”); conf.set(“hadoop.security.authentication”, “kerberos”); UserGroupInformation.setConfiguration(conf); UserGroupInformation.loginUserFromKeytab(“hdfs@CLOUDERA”, “/etc/hadoop/conf/hdfs.keytab”); FileSystem fs = FileSystem.get(conf); FileStatus[] fsStatus = fs.listStatus(new Path(“/”)); for (int i = 0; i < fsStatus.length; i++) { System.out.println(fsStatus[i].getPath().toString()); } 它失败并出现以下错误 java.io.IOException:来自keytab /etc/hadoop/conf/hdfs.keytab的hdfs @ CLOUDERA登录失败:javax.security.auth.login.LoginException:无法从用户获取密码 问题是:如何正确处理密钥表? 我必须将其复制到我的本地机器吗?

DataNode无法在Hadoop中启动

我尝试在Ubuntu 11.04和Java 6 sun上安装Hadoop。 我正在使用hadoop 0.20.203 rc1 build。 我一直在使用java-6-sun在Ubuntu 11.04上遇到问题。 当我尝试启动hadoop时,由于“无法访问存储”,datanode无法启动。 2011-12-22 22:09:20,874 INFO org.apache.hadoop.hdfs.server.common.Storage: Cannot lock storage /home/hadoop/work/dfs_blk/hadoop. The directory is already locked. 2011-12-22 22:09:20,896 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Cannot lock storage /home/hadoop/work/dfs_blk/hadoop. The directory is already locked. at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.lock(Storage.java:602) at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.analyzeStorage(Storage.java:455) at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:111) at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:354) at org.apache.hadoop.hdfs.server.datanode.DataNode.(DataNode.java:268) at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1480) at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1419) at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1437) at […]

在本地/远程集群上运行java hadoop作业

我正在尝试在本地/远程集群上运行hadoop作业。 将来这项工作将从Web应用程序执行。 我正试图从eclipse执行这段代码: public class TestHadoop { private final static String host = “localhost”; public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException { run(); } static void run() throws IOException, InterruptedException, ClassNotFoundException { Configuration conf = new Configuration(); // run on other machine/cluster conf.set(“fs.default.name”, “hdfs://” + host + “:8020”); conf.set(“mapred.job.tracker”, “hdfs://” + host + […]

无法在Spark中配置ORC属性

我正在使用Spark 1.6(Cloudera 5.8.2)并尝试以下方法来配置ORC属性。 但它不会影响输出。 下面是我试过的代码片段。 DataFrame dataframe = hiveContext.createDataFrame(rowData, schema); dataframe.write().format(“orc”).options(new HashMap(){ { put(“orc.compress”,”SNAPPY”); put(“hive.exec.orc.default.compress”,”SNAPPY”); put(“orc.compress.size”,”524288″); put(“hive.exec.orc.default.buffer.size”,”524288″); put(“hive.exec.orc.compression.strategy”, “COMPRESSION”); } }).save(“spark_orc_output”); 除此之外,我还尝试了在hive-site.xml和hiveContext对象中设置的这些属性。 输出上的hive –orcfiledump确认未应用配置。 Orcfiledump片段如下。 Compression: ZLIB Compression size: 262144

hadoop – map reduce任务和静态变量

我刚刚开始研究一些hadoop / hbase MapReduce作业(使用cloudera),我有以下问题: 比方说,我们有一个带有main和static viariable的java类。 该类定义了与Mapper和Reducer任务相对应的内部类。 在执行作业之前,主要初始化静态变量。 在Mapper类中读取此变量。 然后在集群上使用’hadoop jar’启动该类。 我的问题:我没有看到其他节点上的Map和Reduce任务如何看到该静态变量。 是否有任何“hadoop magic”允许节点共享jvm或静态变量? 这怎么可能工作? 我必须在这样做的一个类上工作,我无法弄清楚在非单一节点集群中这是怎么回事。 谢谢

如何在YARN Spark作业中设置环境变量?

我试图通过使用带有newAPIHadoopRDD的AccumuloInputFormat从Apache Spark作业(用Java编写)访问Accumulo 1.6 。 为了做到这一点,我必须通过调用setZooKeeperInstance方法告诉AccumuloInputFormat在哪里找到ZooKeeper。 此方法采用ClientConfiguration对象,该对象指定各种相关属性。 我正在通过调用静态loadDefault方法创建我的ClientConfiguration对象。 此方法应该在client.conf文件的各个位置查看以从中加载其默认值。 应该看的其中一个地方是$ACCUMULO_CONF_DIR/client.conf 。 因此,我试图设置ACCUMULO_CONF_DIR环境变量,使其在Spark运行作业时可见(作为参考,我试图在yarn-cluster部署模式下运行)。 我还没有找到成功的方法。 到目前为止,我已经尝试过: 在setExecutorEnv(“ACCUMULO_CONF_DIR”, “/etc/accumulo/conf”)调用setExecutorEnv(“ACCUMULO_CONF_DIR”, “/etc/accumulo/conf”) 在spark-env.sh导出spark-env.sh 在spark-defaults.conf设置spark.executorEnv.ACCUMULO_CONF_DIR 他们都没有工作。 当我在调用setZooKeeperInstance之前打印环境时,不会出现ACCUMULO_CONF_DIR 。 如果它是相关的,我正在使用CDH5版本的所有东西。 这是我正在尝试做的一个例子(为简洁而省略了导入和exception处理): public class MySparkJob { public static void main(String[] args) { SparkConf sparkConf = new SparkConf(); sparkConf.setAppName(“MySparkJob”); sparkConf.setExecutorEnv(“ACcUMULO_CONF_DIR”, “/etc/accumulo/conf”); JavaSparkContext sc = new JavaSparkContext(sparkConf); Job accumuloJob = Job.getInstance(sc.hadoopConfiguration()); // Foreach loop to print […]