Skip to content

rocksdbjni Not compiled with HDFS support is reported when HdfsEnv is used #9067

@collabH

Description

@collabH

Hi,guys,There is Not compiled with HDFS support when I use ROCKsdbjni HdfsEnv. How can I fix it? Thank you

Expected behavior

  • pom.xm
  <dependencies>
        <!-- https://mvnrepository.com/artifact/org.rocksdb/rocksdbjni -->
        <!-- https://mvnrepository.com/artifact/org.rocksdb/rocksdbjni -->
        <dependency>
            <groupId>org.rocksdb</groupId>
            <artifactId>rocksdbjni</artifactId>
            <version>6.22.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.0.0</version>
        </dependency>
    </dependencies>
  • code
 public static final String HDFS_SST_PATH = "hdfs://hadoop:8082/rocksdb";
    public static final String HDFS_DATA_PATH = "/rocksdb/data";
    public static final String HDFS_LOG_PATH = "/rocksdb/log";
    public static final String HDFS_WAL_PATH = "/rocksdb/wal";

    public static void main(String[] args) throws RocksDBException {
        DBOptions dbOptions = new DBOptions();
        dbOptions.setWalDir(HDFS_WAL_PATH);
        dbOptions.setDbLogDir(HDFS_LOG_PATH);
        dbOptions.setCreateMissingColumnFamilies(true);
        dbOptions.setCreateIfMissing(true);
        dbOptions.setAllowConcurrentMemtableWrite(true);
        dbOptions.setSstFileManager(new SstFileManager(new HdfsEnv(HDFS_SST_PATH)));
        dbOptions.setEnv(new HdfsEnv("hdfs://hadoop:8082/"));
        List<ColumnFamilyDescriptor> columnFamilyDescriptors = Lists.newArrayList();
        columnFamilyDescriptors.add(new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY));
        ColumnFamilyOptions columnFamilyOptions = new ColumnFamilyOptions();
        columnFamilyOptions.setLevelCompactionDynamicLevelBytes(true);
        BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
        blockBasedTableConfig.setFilterPolicy(new BloomFilter());
        blockBasedTableConfig.setBlockCache(new LRUCache(2000));
        blockBasedTableConfig.setEnableIndexCompression(true);
        columnFamilyOptions.setTableFormatConfig(blockBasedTableConfig);
        columnFamilyOptions.setCompactionThreadLimiter(new ConcurrentTaskLimiterImpl("compaction-thread", 4));
        columnFamilyDescriptors.add(new ColumnFamilyDescriptor("user".getBytes(), columnFamilyOptions));
        List<ColumnFamilyHandle> columnFamilyHandles = Lists.newArrayList();
        RocksDB db = RocksDB.open(dbOptions, HDFS_DATA_PATH, columnFamilyDescriptors, columnFamilyHandles);
        ColumnFamilyHandle userCf = columnFamilyHandles.get(1);
        /**
         * create
         */

        // put
        db.put(userCf, "name".getBytes(), "huangsm".getBytes());

        for (ColumnFamilyHandle columnFamilyHandle : columnFamilyHandles) {
            columnFamilyHandle.getDescriptor().getOptions().close();
        }
        dbOptions.close();
        db.close();
    }
  • error log
Exception in thread "main" org.rocksdb.RocksDBException: Not compiled with hdfs support
	at org.rocksdb.HdfsEnv.createHdfsEnv(Native Method)
	at org.rocksdb.HdfsEnv.<init>(HdfsEnv.java:22)
	at org.rocksdb.baseoperator.curd.RocksDBBestPractice.main(RocksDBBestPractice.java:43)

Actual behavior

I think open DB should be a success

Steps to reproduce the behavior

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions