我对此很好奇.
我想检查哪个函数更快,所以我创建了一个小代码,我执行了很多次.
public static void main(String[] args) {
long ts;
String c = "sgfrt34tdfg34";
ts = System.currentTimeMillis();
for (int k = 0; k < 10000000; k++) {
c.getBytes();
}
System.out.println("t1->" + (System.currentTimeMillis() - ts));
ts = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
Bytes.toBytes(c);
}
System.out.println("t2->" + (System.currentTimeMillis() - ts));
}
Run Code Online (Sandbox Code Playgroud)
"第二个"循环更快,因此,我认为hadoop中的Bytes类比String类中的函数更快.然后,我改变了循环的顺序,然后c.getBytes()变得更快.我执行了很多次,我的结论是,我不知道为什么,但是在第一个代码执行后我的VM中发生了一些事情,以便第二个循环的结果变得更快.
我读过Redis和RocksDB,我没有得到Redis优于RocksDB的优势.
我知道Redis全部在内存中,而RocksDB在内存中并使用闪存存储.如果所有数据都适合内存,我应该选择哪一个?他们有相同的表现吗?Redis与CPU的数量呈线性关系?我想还有其他一些我没有得到的差异.
我有一个适合内存的数据集,我打算选择Redis,但似乎RocksDB提供了相同的功能,如果有一天数据集增长太多,我就不必担心内存了.
我正在使用Hbase,当我查询Hbase时,我开始遇到一个丑陋的错误.
问题是当我尝试与Hbase建立连接时出现此错误.唯一的问题是我使用线程,,,但实际上并不是太多.
Caused by: org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=10, exceptions:
Wed Dec 04 16:09:13 CET 2013, org.apache.hadoop.hbase.client.HTable$5@7271601f, java.io.IOException: org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@35cc96e8 closed
Wed Dec 04 16:09:14 CET 2013, org.apache.hadoop.hbase.client.HTable$5@7271601f, java.io.IOException: org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@35cc96e8 closed
Wed Dec 04 16:09:15 CET 2013, org.apache.hadoop.hbase.client.HTable$5@7271601f, java.io.IOException: org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@35cc96e8 closed
Wed Dec 04 16:09:16 CET 2013, org.apache.hadoop.hbase.client.HTable$5@7271601f, java.io.IOException: org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@35cc96e8 closed
Wed Dec 04 16:09:18 CET 2013, org.apache.hadoop.hbase.client.HTable$5@7271601f, java.io.IOException: org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@35cc96e8 closed
Wed Dec 04 16:09:20 CET 2013, org.apache.hadoop.hbase.client.HTable$5@7271601f, java.io.IOException: org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@35cc96e8 closed
Wed Dec 04 16:09:24 CET 2013, org.apache.hadoop.hbase.client.HTable$5@7271601f, java.io.IOException: org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@35cc96e8 closed
Wed …Run Code Online (Sandbox Code Playgroud) 如果你有一个列族,rowkey的所有列都在同一个HFile中?来自rowkey和同一列族的数据可以混合在不同的HFile中吗?这是因为我认为它们已经分类了,但我读了一本书:
来自单个列族的单行数据不需要存储在同一个HFile中.这就是为什么行可能太宽而且不适合单个HFile?
唯一的要求是在HFile中,行的列族的数据存储在一起.这对我来说似乎有些矛盾.
注意:我一直在阅读有关该主题的一些内容.HBase使用LSM树.我有一个rowkey和一个HFile中的所有数据.之后,我可以添加一些新数据,它们将存储在内存中,当内存已满时,HBase会将这些数据存储在新的 HFile中.所以,我可以在两个HFile中为一个rowkey设置限定符.如果我想对该rowkey进行获取或扫描操作,我将不得不寻找两个文件.随着时间的推移,HBase将执行一个主要的压缩,它将创建一个唯一的HFile加入旧的两个HFile并在压缩后删除它们.所以,如果我想查找该rowkey,我只需要一次搜索.我对吗??我不明白为什么会有轻微和重大的压实,因为他们似乎也这样做.
我有一个带有嵌套文档的文档,我想为Solr定义模式.我一直在阅读文档,但我不知道如何使用嵌套文档定义schema.xml.
当我尝试索引文档时,addBean我得到一个错误,因为我在模式中没有该字段obj1,我不知道如何定义它.
我正在使用带有@Field注释的java对象.
public class ObjToIndex {
@Field
String id;
@Field
String name;
@Field
ObjToIndex2 obj1;
public class ObjToIndex2 {
@Field
String id;
@Field
String lastName;
Run Code Online (Sandbox Code Playgroud)
我不知道如何在模式中定义obj1类型为"object"或类似的字段.
处理小文件的最佳方法是什么?我一直在阅读答案和阅读,我找不到任何真正好的方法来做到这一点.如果我在HDFS中有20Tb的小数据,我该怎么办?如果我要多次处理我的数据,我会把它们变成SequenceFiles,但如果我只处理它们会发生什么呢?
我已经阅读了一些可能性,如果有更多的东西,有人可以纠正我的一些,那就太好了.
SequenceFiles.
缺点:问题是我必须运行mapreduce,所以如果我只想处理一次数据,我认为这不值得.如果我必须运行如此多的mapreduce作为我拥有的文件,为什么我要浪费时间将我的文件转换为SequenceFile?
PROS:它节省了nameNode中的空间,并且实现了一个SequenceInputFormat.
档
缺点:我有很多mapreduces文件.它在NameNode中花费了太多内存
CombineFileInputFormat
缺点:它在NameNode中花费了太多内存
PROS:它可以按块组合文件,因此我不必执行与文件一样多的映射.
HAR的
缺点:如果我想生成,我必须执行mapreduce作业,与SequenceFiles相同.有些点文件是重复的,所以我需要额外的内存来生成它们,之后我可以删除旧文件.
PROS:我们可以打包文件,我不确定每个HAR是否只有一个mapreduce.
我正在寻找一种方法来打包(如果它可以压缩文件)并且不必执行一个mapreduce每个文件而不执行mapreduce来生成那些"新"文件,同时节省内存在NameNode中.SequenceFiles看起来很不错,但生成它们看起来太昂贵了.
我正在尝试使用 Log4j2 配置 JsonLayaout。我想在 JSON 中的一条消息中包含堆栈跟踪。我知道我必须使用“完整”属性。
我创建的示例类是:
public class MyApp {
private static final Logger logger = LogManager.getLogger(MyApp.class);
public static void main(final String... args) {
logger.debug("Entering application.");
try{
int i = 0;
int a = 5 / i;
}catch(Exception e){
//StringWriter sw = new StringWriter();
//e.printStackTrace(new PrintWriter(sw));
//String exceptionAsString = sw.toString();
logger.error(exceptionAsString);
}
}
}
Run Code Online (Sandbox Code Playgroud)
log4j2.properties 是:
name=PropertiesConfig
property.filename = logs
appenders = file, console
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = JSONLayout
appender.console.layout.complete="false"
#appender.console.layout.compact = true
#appender.console.layout.pattern = …Run Code Online (Sandbox Code Playgroud) 我一直在阅读我应该在Hbase中禁用大块扫描的阻塞缓存.我认为这是因为你在大扫描中获得了更好的性能,因为你没有使用GC并节省了加载块缓存所花费的时间,但我读了人们获得相同性能的基准测试.
我认为,如果我不使用blockcache,我应该获得时间,因为GC不必经常执行.我从Cloudera那里找到了一个关于这个问题的问题,我真的不喜欢测试问题的任何可能的回答,我想这应该是事实.那么,如果你禁用了blockcache,你会获得更好的大型(全表)扫描性能吗?是什么原因?
我正在尝试序列化和对象,解析为String并反序列化,但它不起作用.当我将byte []解析为String或反之时,我想我错过了一些东西.
String obj = new String(SerializationUtils.serialize(configuration));
Configuration test = (Configuration)SerializationUtils.deserialize(obj.getBytes());
Run Code Online (Sandbox Code Playgroud)
为什么不起作用?
我收到此错误:
org.apache.commons.lang.SerializationException: java.io.StreamCorruptedException: invalid stream header: EFBFBDEF
at org.apache.commons.lang.SerializationUtils.deserialize(SerializationUtils.java:168)
at org.apache.commons.lang.SerializationUtils.deserialize(SerializationUtils.java:193)
Run Code Online (Sandbox Code Playgroud)
解:
将字节[]编码并加载到Base64
有什么方法可以让IntelliJ在使用Scala编程时显示带有变量类型的工具提示?
我知道Eclipse有这个功能.我一直在寻找设置,我没有找到它.
我正在尝试使用 cassandraunit 测试 Cassandra。我从 github 粘贴了测试并翻译为 Scala,但它不起作用。
import org.junit.Rule
import org.scalatest.FunSuite
import com.datastax.driver.core.ResultSet
import org.cassandraunit.CassandraCQLUnit
import org.cassandraunit.dataset.cql.ClassPathCQLDataSet
class CassandraTest extends FunSuite{
@Rule
val cassandraCQLUnit = new CassandraCQLUnit(new ClassPathCQLDataSet("statementsWithBlankEndings.cql", "mykeyspace"))
test("really simple transformation") {
val session = cassandraCQLUnit.session
val resultSet = session.execute("select * from testCQLTable WHERE id='1690e8da-5bf8-49e8-9583-4dff8a570737'")
println(resultSet.iterator().next().getString("value"))
}
}
java.lang.NullPointerException was thrown.
java.lang.NullPointerException
at CassandraTest$$anonfun$1.apply$mcV$sp(CassandraTest.scala:21)
at CassandraTest$$anonfun$1.apply(CassandraTest.scala:18)
at CassandraTest$$anonfun$1.apply(CassandraTest.scala:18)
at org.scalatest.OutcomeOf$class.outcomeOf(OutcomeOf.scala:85)
at org.scalatest.OutcomeOf$.outcomeOf(OutcomeOf.scala:104)
at org.scalatest.Transformer.apply(Transformer.scala:22)
at org.scalatest.Transformer.apply(Transformer.scala:20)
at org.scalatest.FunSuiteLike$$anon$1.apply(FunSuiteLike.scala:186)
at org.scalatest.TestSuite$class.withFixture(TestSuite.scala:196)
at org.scalatest.FunSuite.withFixture(FunSuite.scala:1560)
at org.scalatest.FunSuiteLike$class.invokeWithFixture$1(FunSuiteLike.scala:183)
at org.scalatest.FunSuiteLike$$anonfun$runTest$1.apply(FunSuiteLike.scala:196)
at org.scalatest.FunSuiteLike$$anonfun$runTest$1.apply(FunSuiteLike.scala:196)
at …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Scala中使用泛型,但在某些情况下它对我不起作用.
我已经将类定义为:
trait Generic[T <: Product] extends Serializable {
def start(ssc: StreamingContext, conf: Conf) = {
val dstream = createDirectStream(...)
val rdd = dstream.map(x => avroToObject(x.value()))
execute(rdd)
}
def execute(dstreamAvro: DStream[T]): Unit
def avroToObject(bytes: Array[Byte]): T
}
Run Code Online (Sandbox Code Playgroud)
后来,我在特定的类中实现了avroToObject方法.当我尝试编译代码时,我收到一个错误.
Error:(36, 30) No ClassTag available for T
val rddAvro = dstream.map(x => avroToObject(x.value()))
Error:(36, 30) not enough arguments for method map: (implicit evidence$2: scala.reflect.ClassTag[T])org.apache.spark.streaming.dstream.DStream[T].
Unspecified value parameter evidence$2.
val rddAvro = dstream.map(x => avroToObject(x.value()))
Run Code Online (Sandbox Code Playgroud)
它发生了什么?我该怎么办呢?
如果我通过以下方式更改了类的声明:
abstract class Generic[T <: Product](implicit c: …Run Code Online (Sandbox Code Playgroud) 我见过这个功能.我用泛型类型创建了这个函数,但我看到了这个解决方案.我不知道是否输入任何更好的args或者有不同的args.
def flatten(ls: List[Any]): List[Any] = ls flatMap {
case ms: List[_] => flatten(ms)
case e => List(e)
}
Run Code Online (Sandbox Code Playgroud)
要么
def flatten(ls: List[A]): List[A]
Run Code Online (Sandbox Code Playgroud)